Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Switch no reconocer el EOF xq?

Estas en el tema de Switch no reconocer el EOF xq? en el foro de C/C++ en Foros del Web. #include<stdio.h> int main() { int calificacion; int cuentaA = 0; int cuentaB = 0; int cuentaC = 0; int cuentaD = 0; int cuentaF = ...
  #1 (permalink)  
Antiguo 04/10/2014, 00:32
 
Fecha de Ingreso: octubre-2014
Mensajes: 2
Antigüedad: 9 años, 6 meses
Puntos: 0
Switch no reconocer el EOF xq?

#include<stdio.h>

int main()
{
int calificacion;
int cuentaA = 0;
int cuentaB = 0;
int cuentaC = 0;
int cuentaD = 0;
int cuentaF = 0;

printf("Introduzca la letra que corresponde a la calificacion.\n" );
printf("Introduzca el caracter EOF para finalizar la entrada de datos\n" );

while((calificacion = getchar())!=EOF){

switch(calificacion)
{
case'A':
case'a':
++cuentaA;
break;

case'B':
case'b':
++cuentaB;
break;

case'C':
case'c':
++cuentaC;
break;

case'D':
case'd':
++cuentaD;
break;

case'F':
case'f':
++cuentaF;
break;

case'\n':
case'\t':
case' ':
break;

default:
printf("Introdujo una letra incorrecta.");
printf("Introduzca una nueva calificacion.\n");
}
}
printf("\nLos totales por calificacion son:\n");
printf("A:%d\n",cuentaA);
printf("B:%d\n",cuentaB);
printf("C:%d\n",cuentaC);
printf("D:%d\n",cuentaD);
printf("F:%d\n",cuentaF);
return 0;
}
  #2 (permalink)  
Antiguo 04/10/2014, 04:39
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Switch no reconocer el EOF xq?

Si no me equivoco EOF es -1. De todas las formas puedes imprimir para ver dicho valor. printf("%d", EOF);

Para capturar END OF FILE con getchar() debes usar la combinación de teclas Ctrl+z en windows, y no escribir su valor ya que si entras con el -1 solo te captura el '-' .

Otra cosa es que hagas un define y le cambies su valor, cosa que no recomiendo pero te puede servir.

END OF FILE es solamente un centinela, suele tener un valor diferente de los caracteres de la tabla asc2 ya que imagine que un archivo solo hay caracteres que están contenidos en dicha tabla que va de 0 a 255 si no me equivoco. Pues el centinela es -1 por que al igual en las cadenas de caracteres hay el \0 para marcar su fin, en los archivos el -1 es lo que marca el fin de archivo. fin de archivo == END OF FILE ;)

Se necesita para saber hasta donde se debe leer en caso de querer imprimir o hacer otro tipo de operación, y para marcar el final del archivo ya que en el disco duro es como la memoria ram"continua". De otra forma el ordenador no distinguiría archivos si no fuera por esas centinelas, todo seria un solo archivo del tamaño del disco.

Entonces cuando dices que lea un archivo hasta que se encuentre su end of file, si modificas el EOF por cero por ejemplo y mandar imprimir todos sus caracteres hasta encontrar el EOF, pasaría que el EOF del archivo es -1 y vas tu y haces un #define EOF 0 en tu constante.

#define EOF 0
while( (c = fgetchar()) != EOF ) {
fputchar(c);
}
...sabes que al final del archivo hay el -1 pero tu constante EOF vale otra cosa. Nunca pararía de leer... sacaría todo el disco duro por pantalla o pararía al encontrar el 0 que definiste. Realmente ni me lo imagino que puede pasar. XDD
Por eso no recomiendo que cambies el valor de EOF. ;)

Espero haber ayudado ;)

Última edición por vangodp; 04/10/2014 a las 04:59

Etiquetas: int, reconocer, switch
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.