[C] Error Caracteres (SOLUCIONADO)

Iniciado por MeCraniDOS, 19 Abril 2013, 21:27 PM

0 Miembros y 2 Visitantes están viendo este tema.

MeCraniDOS

Hola, estoy intentando hacer un programa que por ejemplo escribas una cadena, y a esa cadena sumarle un carácter, es decir, lea carácter a carácter, y lo muestre por pantalla, pero sumándole un carácter..

Explicación:

CitarCadena Origen: "Hola que tal"
CitarCadena Final: "Ipmb rvf ubm"

Pero el resultado es este:
CitarCadena Origen: "Hola que tal"
CitarCadena Final: "ipmbrvfubmmm"

Es decir, sube un carácter en toda la cadena, y los espacios los pone al final como la ultima letra...  :-\ :-\

Podríais decirme porque podría ser?

Saludos

"La física es el sistema operativo del Universo"
     -- Steven R Garman

BlackM4ster

Si subes tu código, sería de ayuda  ;-)
- Pásate por mi web -
https://codeisc.com

leosansan

Pues a mí no me da ese problema:

Código (cpp) [Seleccionar]
Ipmb rvf ubm

Código (cpp) [Seleccionar]
#include <stdio.h>

int main(){
    int i ;
    char frase[100]="Hola que tal";
    //printf("Escribe una frase: ");
    //scanf("%s",&frase);
    for (i=0;frase[i]!='\0';i++){
          if (frase[i]!=' ')
            frase[i]+=1;
    }
    printf("%s", frase);
    return 0;
}


Saluditos!. ....

MeCraniDOS

Cita de: leosansan en 19 Abril 2013, 21:56 PM
Pues a mí no me da ese problema:

Mi código es este, bueno, la parte en la que me da ese error:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <io.h>

using namespace std;

int main(void)
{
  /* char cadena[20];

   int n;

printf("Escriba una frase\n");
gets(cadena);
printf("Cadena con caracter sumado\n");

for(n=0;n<19;n++)
   {
       printf("%c", cadena[n] + 1);

   }

   getchar(); */

string Nombre;
string Final;


   printf("Escribe el nombre del archivo que deseas abrir: ");
   getline(cin,Nombre);
   
   ifstream fichero_original;
   ofstream fichero_final;


       char caracter1, caracter2;

fichero_original.open(Nombre.c_str(), ios::binary);

Nombre += "_Char.txt";
Final = Nombre;
fichero_final.open(Final.c_str(), ofstream::binary);


fichero_original.seekg(0,ios::end);
unsigned long Tamanyo = fichero_original.tellg();
fichero_original.seekg(0);

for (unsigned int i = 0;i<Tamanyo;i++)
{
   fichero_original>>caracter1;
   caracter2 = caracter1 + 1;
       fichero_final<<caracter2;
}

fichero_original.close();
   fichero_final.close();
}


Lo que hay en el comentario, entre /* */ no me da ningún problema, pero cuando abro un archivo si, al código le he quitado mucha cosa que no se necesita  :silbar: :silbar:

Saludos

PD: Es una mezla de C y C++  :silbar:
"La física es el sistema operativo del Universo"
     -- Steven R Garman

85

#4
parece una mezcla imprudente de c con c++  :P, lo podés hacer en C? por ejemplo ya lo hicieron anteriormente (sin la parte de abrir un archivo de texto).

Cita de: leosansan en 19 Abril 2013, 21:56 PM
...
Código (cpp) [Seleccionar]
#include <stdio.h>

int main(){
   int i ;
   char frase[100]="Hola que tal";
   //printf("Escribe una frase: ");
   //scanf("%s",&frase);
   for (i=0;frase[i]!='\0';i++){
         if (frase[i]!=' ')
           frase[i]+=1;
   }
   printf("%s", frase);
   return 0;
}

...

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

MeCraniDOS

Esque lo que necesito es abriendo el fichero, porque de la otra manera si que funciona, pero al hacerlo en un txt me borra los espacios...  :-\ :-\
"La física es el sistema operativo del Universo"
     -- Steven R Garman

amchacon

Hola MeCrani xD.

Cambia el bucle for para que no modifique espacios:

Código (cpp) [Seleccionar]
for (unsigned int i = 0;i<Tamanyo;i++)
{
fichero_original>>caracter1;

        if (caracter1 != ' ') // Si no es un espacio
    caracter2 = caracter1 + 1;

        fichero_final<<caracter2;
}
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

rir3760

Cita de: MeCraniDOS en 19 Abril 2013, 22:17 PMLo que hay en el comentario, entre /* */ no me da ningún problema, pero cuando abro un archivo si [...]

PD: Es una mezla de C y C++  :silbar:
Como ya te comentaron no es una buena idea mezclar C y C++, mejor hacerlo todo en este ultimo. Para ello puedes utilizar los operadores >> y <<, también se debe utilizar noskipws para procesar todo el contenido del archivo de entrada incluyendo el espacio blanco.

Un programa de ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::noskipws;
using std::cin;
using std::cout;

#include <fstream>
using std::ifstream;
using std::ofstream;

#include <string>
using std::string;

#include <cctype>
using std::isspace;

int main()
{
   string nom_entrada;
   cout << "Nombre del archivo de entrada: ";
   getline(cin, nom_entrada);
   
   ifstream entrada(nom_entrada.c_str());
   noskipws(entrada);
   
   string nom_salida = nom_entrada + "_Char.txt";
   ofstream salida(nom_salida.c_str());
   
   for (unsigned char ch; entrada >> ch; salida << ch)
      if (!isspace(ch))
         ch++;
   
   entrada.close();
   salida.close();
   
   return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

MeCraniDOS

Hola amchacon  ;-),

Gracias a todos por las respuestas, ya solucioné el error  :silbar:

Saludos
"La física es el sistema operativo del Universo"
     -- Steven R Garman