C programación

Iniciado por Overlord9981, Junio 24, 2016, 08:05:37 AM

Tema anterior - Siguiente tema

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

Junio 24, 2016, 08:05:37 AM Ultima modificación: Junio 24, 2016, 02:45:53 PM por Cl0udswX
Buenas, aquí hago otra pregunta ya que no veo nada por internet que me ayude con mi código donde trato de buscar el valor EOF y que me lo imprima y mientras sea distinto a EOF el ciclo while sigue funcionando.

Código: c
//Entrada y salida de carácteres y EOF

#include <stdio.h>

main()
{


int c;

c = getchar();


while (c != EOF)
{

putchar (c);
c = getchar();

}




}

Mi pregunta es: ¿Cuál se supone que es el valor EOF en una entrada y salida de datos para completar bien el ejercicio del programa?

Gracias de antemano.
Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Junio 24, 2016, 09:25:37 AM #1 Ultima modificación: Junio 24, 2016, 09:49:47 AM por grep
Unas cuantas cosas,

a pesar de que tu compilador lo permita, intenta codificar de una forma más clara. Por ejemplo

Código: c
main()


es ambiguo. Si no pretendes recibir entradas, entonces es mejor esta forma

Código: c
int main(void)


más un
Código: c
return 0;
al final de la función.

Y por favor acomoda las líneas de código. A pesar de que el programa tiene pocas líneas de código, puedes hacerlo más legible.


Ahora bien, con respecto a tu pregunta, no puedes imprimir EOF porque tienes un while que dice "mientras c sea distinto a EOF, entonces entro". Si tienes EOF entonces no entras.

Para ingresar EOF en tu terminal debes presionar CTRL+D en Linux o CTRL+Z en Windows. De esta forma getchar() recibe un EOF.

Si quieres imprimir el valor de EOF entonces puedes hacer:

Código: c
printf("EOF: %d", EOF);


Si quieres imprimir antes de terminar puedes hacer esto:

Código: c

#include <stdio.h>

int main (void)
{
    int c = '\0';
   
    while (c != EOF) {
        c = getchar ();
        putchar (c);
    }

    return 0;
}


El valor de EOF suele ser -1, lo encuentras en stdio.h.

Junio 24, 2016, 10:32:15 AM #2 Ultima modificación: Junio 24, 2016, 10:34:00 AM por Overlord9981
Vale vayamos por partes:

lo de main ->He visto más código así pero en el manual que estoy siguiendo me pone que lo haga así hasta llegar a ese nivel estoy (en entradas y salidas de una introducción para ver como funcionan).
EOF -> el manual dice que es o que devería devolver 0 o 1, que esta definido en stdio.h como has dicho y me pide en un ejercicio que imprima en pantalla el valor de  EOF  con el código que he puesto  y solo me devuelve los carácteres que introduzco a pesar de que intente darle a Ctrl + D como me has dicho y según el manual pues si no hay mas datos a la  entrada se devuelve EOF pero aunque pulse intro y todo lo que crea que es para parar un programa no me devuelve EOF y sigue esperando una entrada.
Lo de acomodar el código lo tenía así porque como estoy aprendiendo dejo comentarios y tenía espacios en medio al copiarlos.
Posdata: (he quitado la introducción de caraćteres de al principio porque no funciona en el ciclo while y no me devuelve un dato)
Código: c

#include <stdio.h>

main()
{
int c;
while (c != EOF)
{
c = getchar();
putchar (c);
}
}

Aquellos que renunciarían a la libertad esencial por adquirir un poco de seguridad temporal no merecen ni libertad ni seguridad - Benjamin Franklin

Junio 24, 2016, 11:22:40 AM #3 Ultima modificación: Junio 24, 2016, 11:52:53 AM por grep
¿Qué sistema operativo y qué compilador usas?

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
EOF -> el manual dice que es o que devería devolver 0 o 1

¿Estas en Linux?. Este enlace mestra el valor de EOF:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Lo que quizás te resulte dificil de entender es que EOF no es realmente un caracter. A pesar de que stdio.h defina a EOF como un entero int, esto es solo una "señal" de que el buffer de entrada ha llegado a su final.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
me pide en un ejercicio que imprima en pantalla el valor de  EOF  con el código que he puesto  y solo me devuelve los carácteres que introduzco

no comprendo la idea.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
según el manual pues si no hay mas datos a la  entrada se devuelve EOF pero aunque pulse intro y todo lo que crea que es para parar un programa no me devuelve EOF y sigue esperando una entrada

Un intro (o <ENTER>) solo devuelve '\n' en linux o "\r\n" en windows.

"Si no hay mas datos", mientras siguas presionando teclas obviamente el programa sigue recibiendo entrada. Si no presionas nada, igualmente el programa sigue esperando entrada.

La forma de deternelo es mandando una "señal" desde la terminal. Esto puede ser un EOF o una terminación a la fuerza.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Lo de acomodar el código lo tenía así porque como estoy aprendiendo dejo comentarios y tenía espacios en medio al copiarlos.

Puedes utilizar este indenter antes de pegar el código directamente:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta