Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Treppe en 18 Julio 2011, 13:41 pm



Título: getchar() != EOF
Publicado por: Treppe en 18 Julio 2011, 13:41 pm
Hola, esto viene en relación con un problema que tuve anteriormente ya solucionado. Bueno comprobando lo que me dijeron llegué a hacer el siguiente programa:

#include <stdio.h>

main()
{
      int c;
      while ((c = getchar())!= EOF)
            printf("%d\t\n", ((c = getchar()) != EOF));
            putchar(c);
}

 En fin, el caso es que quisiera saber como puedo verificar que la expresión getchar() != EOF es 0 o 1. Y a parte de eso quiero saber como imprimir el valor de EOF. La verdad es que estoy un poco perdido, le he dado vueltas pero no lo encuentro, aunque descubrí algo, cuando abro el programa y escribo EOF sale " 1 1" tal vez sea eso?, y si no lo se... qué es? xD gracias por las molestias  :)


Título: Re: getchar() != EOF
Publicado por: rir3760 en 18 Julio 2011, 16:27 pm
Bueno comprobando lo que me dijeron llegué a hacer el siguiente programa:

#include <stdio.h>

main()
{
      int c;
      while ((c = getchar())!= EOF)
            printf("%d\t\n", ((c = getchar()) != EOF));
            putchar(c);
}
Si vas a aprender C te conviene hacerlo bien, la definición de la función main debe ser "int main(void) ..." o bien "int main() ..." y se debe indicar su valor de retorno con al menos "return 0;".

Un problema importante en tu programa es que lees dos caracteres dentro del bucle: uno en la condición y otro en la llamada a printf. Y lo que se ejecuta en el bucle solo es la primera sentencia ya que faltan las llaves.


Como verificar que la expresión "(c = getchar()) != EOF" resulte en 1 o 0 esta implícito en tu programa: 1) El bucle se ejecuta solo mientras su condición resulte en un valor distinto de cero y 2) El resultado del operador de desigualdad  "!=" resulta en 1 si los operandos son distintos y 0 en caso contrario (si son iguales).


La macro EOF resulta en un valor de tipo int, puedes imprimirla como cualquier variable de ese tipo.

El programa con esas correcciones es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int c;
  7.  
  8.   while ((c = getchar()) != EOF)
  9.      putchar(c);
  10.  
  11.   printf("EOF == %d\n", EOF);
  12.  
  13.   return EXIT_SUCCESS;
  14. }

Un saludo


Título: Re: getchar() != EOF
Publicado por: Treppe en 19 Julio 2011, 13:42 pm
Ok, gracias. Pero hay otra cosa que no entiendo que creo que es fundamental para esto xD. Es sobre la salida y entrada de caráctares, no entiendo muy bien el concepto... en qué consiste?, en donde se efectua?, para que sirve?.


Título: Re: getchar() != EOF
Publicado por: [L]ord [R]NA en 19 Julio 2011, 17:01 pm
De donde estas estudiando C?


Título: Re: getchar() != EOF
Publicado por: rir3760 en 19 Julio 2011, 18:21 pm
Es sobre la salida y entrada de caráctares, no entiendo muy bien el concepto... en qué consiste?, en donde se efectua?, para que sirve?.
Si apenas empiezas con el lenguaje C te conviene tener a la mano un buen libro o curso sobre este, revisa los mensajes fijos en este foro, hay uno sobre el tema.

Cuando un programa se ejecuta se tienen disponibles tres streams (o flujos) de caracteres: la entrada estándar (stdin), la salida estándar (stdout) y la salida estándar para errores (stderr). Ellos te permiten acceder a la entrada y salida del programa en forma de una secuencia de caracteres (un stream en modo texto con algunas limitaciones).

El origen de esos streams depende del entorno. Por ejemplo el programa se puede ejecutar desde un script y su entrada puede ser un archivo de texto o tal vez la salida de otro programa.

De nuevo: para esto nada mejor que un buen libro.

Un saludo


Título: Re: getchar() != EOF
Publicado por: Treppe en 20 Julio 2011, 21:35 pm
 Este es el libro que yo cogí del primer del mensaje fijo de este subforo, "El Lenguaje de Programación C"  por Brian W. Kernighan, Dennis M. Ritchie. Alguna otra sugerencia?


Título: Re: getchar() != EOF
Publicado por: rir3760 en 20 Julio 2011, 21:48 pm
En mi opinion uno de los mejores libros para aprender C (ademas de K&R2) es el siguiente, por desgracia solo disponible (hasta donde tengo entendido) en ingles:
----
Pointers on C, 1st edition
Kenneth Reek
Addison Wesley, July 25, 1997
ISBN: 0673999866
----

Un saludo