getchar() != EOF

Iniciado por Treppe, 18 Julio 2011, 13:41 PM

0 Miembros y 1 Visitante están viendo este tema.

Treppe

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  :)

rir3760

Cita de: Treppe en 18 Julio 2011, 13:41 PMBueno 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:
#include <stdio.h>
#include <stdlib.h>

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


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

Treppe

#2
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?.

[L]ord [R]NA

De donde estas estudiando C?

rir3760

Cita de: Treppe en 19 Julio 2011, 13:42 PMEs 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
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

Treppe

 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?

rir3760

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
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