Sou iniciante em c++, estou lendo o livro de deitel how to program 3º edição, e me deparei com um programa exemplo que
apresenta comportamento anormal ele não funciona! baixei o mesmo programa do site em english,e o mesmo não funcionou tambêm!
Eu consegui fazer o código funcionar retirando o valor sentinela, mas gostaria de entender o motivo do original não ser funcional.
O objetivo do programa é apenas armazenar as notas e mostrar na tela, usando as estruturas aninhas while e switch com valor sentinela, porem não
consegui fazer o valor sentinela funcionar, quando o valor sentinela é acionado, aparece a mensagem, que deveria aparecer quando você digita-se um caractere inválido, e eu tentei compilar o codigo original tanto em ambiente UNIX e ambiente WINDOWS;
Original:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
int grade, // one grade
aCount = 0, // number of A's
bCount = 0, // number of B's
cCount = 0, // number of C's
dCount = 0, // number of D's
fCount = 0; // number of F's
cout << "Enter the letter grades." << endl
<< "Enter the EOF character to end input." << endl;
while ( ( grade = cin.get() ) != EOF ) {
switch ( grade ) { // switch nested in while
case 'A': // grade was uppercase A
case 'a': // or lowercase a
++aCount;
break; // necessary to exit switch
case 'B': // grade was uppercase B
case 'b': // or lowercase b
++bCount;
break;
case 'C': // grade was uppercase C
case 'c': // or lowercase c
++cCount;
break;
case 'D': // grade was uppercase D
case 'd': // or lowercase d
++dCount;
break;
case 'F': // grade was uppercase F
case 'f': // or lowercase f
++fCount;
break;
case '\n': // ignore newlines,
case '\t': // tabs,
case ' ': // and spaces in input
break;
default: // catch all other characters
cout << "Incorrect letter grade entered."
<< " Enter a new grade." << endl;
break; // optional
}
}
cout << "\n\nTotals for each letter grade are:"
<< "\nA: " << aCount
<< "\nB: " << bCount
<< "\nC: " << cCount
<< "\nD: " << dCount
<< "\nF: " << fCount << endl;
return 0;
}
Do jeito que eu arrumei:
#include <iostream>
using namespace std;
int main()
{
int nentrada,
aCount = 0,
bCount = 0,
cCount = 0,
dCount = 0,
fCount = 0;
cout << "Digite as letras correspondentes as notas, e digite z para sair do programa." << endl;
while (nentrada = cin.get()){
switch ( nentrada ) {
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 '\t':
case ' ':
break;
case 'z':
case 'Z':
exit(0);
break;
default:
break; }
system("cls");
cout << "Totalizando as notas:"
<< "\nA: " << aCount
<< "\nB: " << bCount
<< "\nC: " << cCount
<< "\nD: " << dCount
<< "\nF: " << fCount << endl;
cout<<"Digite as letras correspondentes as notas, e digite z para sair do programa."<<endl;
}
return 0;
}
Pergunta
Hzsiul
Sou iniciante em c++, estou lendo o livro de deitel how to program 3º edição, e me deparei com um programa exemplo que
apresenta comportamento anormal ele não funciona! baixei o mesmo programa do site em english,e o mesmo não funcionou tambêm!
Eu consegui fazer o código funcionar retirando o valor sentinela, mas gostaria de entender o motivo do original não ser funcional.
O objetivo do programa é apenas armazenar as notas e mostrar na tela, usando as estruturas aninhas while e switch com valor sentinela, porem não
consegui fazer o valor sentinela funcionar, quando o valor sentinela é acionado, aparece a mensagem, que deveria aparecer quando você digita-se um caractere inválido, e eu tentei compilar o codigo original tanto em ambiente UNIX e ambiente WINDOWS;
Original:
#include <iostream> using std::cout; using std::cin; using std::endl; int main() { int grade, // one grade aCount = 0, // number of A's bCount = 0, // number of B's cCount = 0, // number of C's dCount = 0, // number of D's fCount = 0; // number of F's cout << "Enter the letter grades." << endl << "Enter the EOF character to end input." << endl; while ( ( grade = cin.get() ) != EOF ) { switch ( grade ) { // switch nested in while case 'A': // grade was uppercase A case 'a': // or lowercase a ++aCount; break; // necessary to exit switch case 'B': // grade was uppercase B case 'b': // or lowercase b ++bCount; break; case 'C': // grade was uppercase C case 'c': // or lowercase c ++cCount; break; case 'D': // grade was uppercase D case 'd': // or lowercase d ++dCount; break; case 'F': // grade was uppercase F case 'f': // or lowercase f ++fCount; break; case '\n': // ignore newlines, case '\t': // tabs, case ' ': // and spaces in input break; default: // catch all other characters cout << "Incorrect letter grade entered." << " Enter a new grade." << endl; break; // optional } } cout << "\n\nTotals for each letter grade are:" << "\nA: " << aCount << "\nB: " << bCount << "\nC: " << cCount << "\nD: " << dCount << "\nF: " << fCount << endl; return 0; }Do jeito que eu arrumei:#include <iostream> using namespace std; int main() { int nentrada, aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0; cout << "Digite as letras correspondentes as notas, e digite z para sair do programa." << endl; while (nentrada = cin.get()){ switch ( nentrada ) { 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 '\t': case ' ': break; case 'z': case 'Z': exit(0); break; default: break; } system("cls"); cout << "Totalizando as notas:" << "\nA: " << aCount << "\nB: " << bCount << "\nC: " << cCount << "\nD: " << dCount << "\nF: " << fCount << endl; cout<<"Digite as letras correspondentes as notas, e digite z para sair do programa."<<endl; } return 0; }Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.