elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en programa  (Leído 2,528 veces)
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Error en programa
« en: 7 Septiembre 2012, 14:43 pm »

Hola, soy yo otra vez con un error en un programa. Como siempre será algo muy básico que no he conseguido ver, pero aquí os pongo el código fuente:
Código
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.    FILE *fp;
  6.    int count;
  7.    char caracter="a";
  8.    char filename[40];
  9.    printf("Escriba la ruta del archivo: ");
  10.    gets(filename);
  11.    fp = fopen(filename,"r");
  12.  
  13.    while(caracter!=EOF)
  14.    {
  15.        for(count=0, (count<=280) && (caracter!=EOF), count++)
  16.        {
  17.            caracter=getc(fp);
  18.            printf("%X", caracter);
  19.        }
  20.  
  21.        printf("\n");
  22.        rewind(fp);
  23.  
  24.        for(count=0, (count<=280) && (caracter!=EOF), count++)
  25.        {
  26.            caracter=getc(fp);
  27.            printf("%c", caracter);
  28.        }
  29.  
  30.        printf("\n");
  31.    }
  32. }

La idea es que se imprima un archivo en bloques de 280 caracteres en hexadecimal y en ASCII. La verdad es que ni yo mismo creo que este bien hecho de esta manera para imprimir en hexadecimal, pero bueno... Aquí os lo dejo. Espero vuestras correcciones y consejos.

Saludos.


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Error en programa
« Respuesta #1 en: 7 Septiembre 2012, 15:06 pm »

Pues para empezar, deberias acostumbrarte a ponerle valor de retorno a main, luego en el for usas comas en vez de punto y coma:
Código
  1. for(inicializacion;condicion;aumento/decremento)

Tambien podrias poner los errores que te da el compilador.

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error en programa
« Respuesta #2 en: 7 Septiembre 2012, 15:55 pm »

Hola.

Además de los errores que ya te ha comentado 0xDani, te digo unos cuantos más:

El bucle while no es necesario, ya que al salir del segundo for la variable carácter será EOF. En el segundo bucle for, imprimes el carácter, ya que pones '%c'. Para imprimir el ASCII, lo que tienes que hacer es poner '%d'.

Al salir del primer bucle for ocurre una cosa: la variable carácter es EOF. Por lo tanto, como en la condición del segundo for tienes que se repita mientras carácter sea distinto de EOF, no entrará, y no imprimirá el valor ASCII. Para evitarlo, debes darle un valor cualquiera a dicha variable entre un bucle y otro.

Por último, te recomiendo que cuando no vayas a volver a utilizar el fichero que has abierto, lo cierres con fclose(fp).

Aquí te dejo el código editado y comentado:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    FILE *fp;
  6.    int count;
  7.    char caracter; //Aquí no es necesario inicializar el carácter
  8.    char filename[40];
  9.    printf("Escriba la ruta del archivo: ");
  10.    gets(filename);
  11.    fp = fopen(filename,"r");
  12.  
  13. //No hace falta el bucle while, puesto que al salir del segundo "for" la variable carácter será EOF.
  14.        for(count=0;(count<=280) && (caracter!=EOF); count++) //Aquí son ';', no ','
  15.        {
  16.            caracter=getc(fp);
  17.            printf("%X ", caracter);
  18.        }
  19.  
  20.        printf("\n");
  21.        rewind(fp);
  22.        caracter = 'a'; //Le damos un valor para que no sea EOF y pueda entrar en el bucle for.
  23.  
  24.        for(count=0;(count<=280) && (caracter!=EOF); count++)
  25.        {
  26.            caracter=getc(fp);
  27.            printf("%d ", caracter);
  28.        }
  29.  
  30.    fclose(fp);
  31.    return 0;
  32. }
  33.  

Un saludo.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Error en programa
« Respuesta #3 en: 7 Septiembre 2012, 15:56 pm »

Código
  1. char caracter="a";
de esa forma estas asignando una cadena y no un caracter
En línea

Ahorrate una pregunta, lee el man
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: Error en programa
« Respuesta #4 en: 7 Septiembre 2012, 18:04 pm »

Siento haber caído en cosas tan triviales  :(. Eso sí, respecto a lo de que lo imprima en ASCII, depende de la interpretación, pues yo he entendido que imprima el carácter normal, no el número, para lo que sí haría falta %d. Y aun así, el programa no me funciona. Se supone que tiene que pasar el texto por bloques a hexadecimal y ASCII. Si uso el código fuente como fichero a leer, el programa arroja esto:

Escriba la ruta del archivo: ./16-9.c
bf9a1569

Otra cosilla, respecto a lo de poner valor de retorno a main, siempre he visto que la gente suele poner "int main()" y al final de main "return 0". He leído que es para reconocer errores y cosas así, pero no entiendo cómo sacarle partido ¿Me lo podéis explicar o pasarme algún enlace con información?
« Última modificación: 7 Septiembre 2012, 18:07 pm por apoeti » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error en programa
« Respuesta #5 en: 7 Septiembre 2012, 18:24 pm »

Qué raro... A mí me imprime el texto primero en hexadecimal y después en ASCII. Si pongo como archivo el código fuente de mi anterior mensaje, la salida es esta:

Código:
Escriba la ruta del archivo: l.c
23 69 6E 63 6C 75 64 65 20 3C 73 74 64 69 6F 2E 68 3E A A 69 6E 74 20 6D 61 69 6E 28 29 A 7B
 A 20 20 20 20 46 49 4C 45 20 2A 66 70 3B A 20 20 20 20 69 6E 74 20 63 6F 75 6E 74 3B A 20 2
0 20 20 63 68 61 72 20 63 61 72 61 63 74 65 72 3B 20 2F 2F 41 71 75 FFFFFFED 20 6E 6F 20 65
73 20 6E 65 63 65 73 61 72 69 6F 20 69 6E 69 63 69 61 6C 69 7A 61 72 20 65 6C 20 63 61 72 FF
FFFFE1 63 74 65 72 A 20 20 20 20 63 68 61 72 20 66 69 6C 65 6E 61 6D 65 5B 34 30 5D 3B A 20
20 20 20 70 72 69 6E 74 66 28 22 45 73 63 72 69 62 61 20 6C 61 20 72 75 74 61 20 64 65 6C 20
 61 72 63 68 69 76 6F 3A 20 22 29 3B A 20 20 20 20 67 65 74 73 28 66 69 6C 65 6E 61 6D 65 29
 3B A 20 20 20 20 66 70 20 3D 20 66 6F 70 65 6E 28 66 69 6C 65 6E 61 6D 65 2C 22 72 22 29 3B
 A A 2F 2F 4E 6F 20 68 61 63 65 20 66 61 6C 74 61 20 65 6C 20 62 75 63 6C 65 20 77 68 69 6C
65 2C 20 70 75
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62 10 10 105 110 116 32 109 9
7 105 110 40 41 10 123 10 32 32 32 32 70 73 76 69 32 42 102 112 59 10 32 32 32 32 105 110 11
6 32 99 111 117 110 116 59 10 32 32 32 32 99 104 97 114 32 99 97 114 97 99 116 101 114 59 32
 47 47 65 113 117 -19 32 110 111 32 101 115 32 110 101 99 101 115 97 114 105 111 32 105 110
105 99 105 97 108 105 122 97 114 32 101 108 32 99 97 114 -31 99 116 101 114 10 32 32 32 32 9
9 104 97 114 32 102 105 108 101 110 97 109 101 91 52 48 93 59 10 32 32 32 32 112 114 105 110
 116 102 40 34 69 115 99 114 105 98 97 32 108 97 32 114 117 116 97 32 100 101 108 32 97 114
99 104 105 118 111 58 32 34 41 59 10 32 32 32 32 103 101 116 115 40 102 105 108 101 110 97 1
09 101 41 59 10 32 32 32 32 102 112 32 61 32 102 111 112 101 110 40 102 105 108 101 110 97 1
09 101 44 34 114 34 41 59 10 10 47 47 78 111 32 104 97 99 101 32 102 97 108 116 97 32 101 10
8 32 98 117 99 108 101 32 119 104 105 108 101 44 32 112 117
Process returned 0 (0x0)   execution time : 3.190 s
Press any key to continue.

¿No te sale eso, o no es lo que querías?

¡Un saludo!
En línea

apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: Error en programa
« Respuesta #6 en: 7 Septiembre 2012, 18:29 pm »

Vale... epic fail XD. El problema estaba en que lo había guardado con el mismo nombre que el programa erróneo en otra ubicación y estaba usando el erróneo.

El programa va perfecto.
Gracias a todos por vuestra ayuda.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error en programa
.NET (C#, VB.NET, ASP)
zhynar_X 4 3,563 Último mensaje 8 Mayo 2007, 15:35 pm
por zhynar_X
error de programa
Windows
hardyan2 3 7,012 Último mensaje 2 Agosto 2010, 08:48 am
por NSaneBMX
Un programa me da un error
Dudas Generales
Mikroscopik0 4 2,935 Último mensaje 29 Septiembre 2010, 09:08 am
por Mikroscopik0
Error en programa c++
Programación C/C++
z_ane_666 1 3,326 Último mensaje 9 Diciembre 2010, 15:50 pm
por winroot
programa en c++ el programa me da un error dice que la llave correspondiente a {
Programación C/C++
eduardo17445 2 4,505 Último mensaje 5 Junio 2012, 19:51 pm
por eduardo17445
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines