Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: MeCraniDOS en 19 Abril 2013, 21:27 PM

Título: [C] Error Caracteres (SOLUCIONADO)
Publicado por: MeCraniDOS en 19 Abril 2013, 21:27 PM
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

Título: Re: [C] Error Caracteres
Publicado por: BlackM4ster en 19 Abril 2013, 21:27 PM
Si subes tu código, sería de ayuda  ;-)
Título: Re: [C] Error Caracteres
Publicado por: leosansan en 19 Abril 2013, 21:56 PM
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!. .... (http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Título: Re: [C] Error Caracteres
Publicado por: MeCraniDOS en 19 Abril 2013, 22:17 PM
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:
Título: Re: [C] Error Caracteres
Publicado por: 85 en 20 Abril 2013, 02:12 AM
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;
}

...

Título: Re: [C] Error Caracteres
Publicado por: MeCraniDOS en 20 Abril 2013, 11:12 AM
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...  :-\ :-\
Título: Re: [C] Error Caracteres
Publicado por: amchacon en 20 Abril 2013, 12:06 PM
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;
}
Título: Re: [C] Error Caracteres
Publicado por: rir3760 en 20 Abril 2013, 16:26 PM
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
Título: Re: [C] Error Caracteres
Publicado por: MeCraniDOS en 20 Abril 2013, 18:15 PM
Hola amchacon  ;-),

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

Saludos