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

Problema de novato

Estas en el tema de Problema de novato en el foro de C/C++ en Foros del Web. nesesito ayuda, estoy haciendo un curso y debo hacer un programa que te lea la nota (a,b,c,d o f) y te la cuente, usando el ...
  #1 (permalink)  
Antiguo 23/05/2008, 17:21
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 16 años
Puntos: 3
Problema de novato

nesesito ayuda, estoy haciendo un curso y debo hacer un programa que te lea la nota (a,b,c,d o f) y te la cuente, usando el while, switch, case, EOF y default. Parecia muy facil pero cuando lo ejecuto me sale un error, al poner -1(el EOF predeterminado o por lo menos el mio) para terminar el programa y pasar a la siguiente fase me imprime 2 veces el error(default)

aqui esta el codigo, ojala me ayuden:
______________
#include <stdlib.h>
#include <iostream>
#include <stdio.h>

using namespace std;
int main()
{
int grade;
int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0;

cout << "Ingresa la letra de tu nota\nIngresa -1 para finalizar.\n";

while ( (grade = getchar() ) != EOF) {
switch (grade) {
case 'A': case 'a':
++aCount;
break;
case 'B' : case 'b':
++bCount;
break;
case 'C' : case 'c':
++cCount;
break;
case 'D' : case 'd':
++dCount;
break;
case 'F' : case 'f':
++fCount;
break;
case '\n' : case ' ':
break;

default:
cout << "Letra incorrecta.\nIngresa nueva letra.\n";
break;
}
}
cout <<"\nEl total de notas es:\n";
cout <<"A: "<< aCount <<"";
cout <<"B: "<< bCount <<"";
cout <<"C: "<< cCount <<"";
cout <<"D: "<< dCount <<"";
cout <<"E: "<< fCount <<"";

system("PAUSE");
return 0;
}
  #2 (permalink)  
Antiguo 28/05/2008, 13:53
 
Fecha de Ingreso: mayo-2008
Ubicación: Caracas
Mensajes: 35
Antigüedad: 16 años
Puntos: 1
Respuesta: Problema de novato

Hola.
en mi pc el unico problema que genera tu programa es que cae en un lazo infinito ya que el valor de grade nunca es EOF. Puedes utilizar otras formas para darle valor a la variable grade intenta usar

cin >> grade;

y luego comparas el valor de grade.

Saludos
  #3 (permalink)  
Antiguo 29/05/2008, 06:55
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Respuesta: Problema de novato

Al estar leyendo un solo caracter nunca va a leer "-1", ya que está compuesto por 2 caracteres, el '-' y el '1', el EOF se genera presionando CTRL + Z en windows/DOS y CTRL + D en ambientes Unix Like.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #4 (permalink)  
Antiguo 29/05/2008, 17:38
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 16 años
Puntos: 3
Respuesta: Problema de novato

Lo tengo resuelto, iria asi:
__________________
#include <stdlib.h>
#include <iostream>
#include <stdio.h>

using namespace std;
int main()
{
char z;
int grade;
int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0;

cout << "Ingresa la letra de tu nota\nPresiona ctrl+z para finalizar.\n";

while ( (grade = getchar() ) != EOF) {
switch (grade) {
case 'A': case 'a':
++aCount;
break;
case 'B' : case 'b':
++bCount;
break;
case 'C' : case 'c':
++cCount;
break;
case 'D' : case 'd':
++dCount;
break;
case 'F' : case 'f':
++fCount;
break;
case '\n' : case ' ':
break;

default:
cout << "Letra incorrecta.\nIngresa nueva letra.\n";
break;
}
}
cout <<"\nEl total de notas es:\n";
cout <<"A: "<< aCount <<".\n";
cout <<"B: "<< bCount <<".\n";
cout <<"C: "<< cCount <<".\n";
cout <<"D: "<< dCount <<".\n";
cout <<"F: "<< fCount <<".\n";

system("PAUSE");
return 0;
}
____________
Me sirvio lo que dijo _Licifer_ eso del ctrl+z, gracias.
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 21:13.