Oppure

Loading
02/04/10 13:54
perseo74
Buongiorno atutti sto cercando di imparare C++ da un manuale, devo ammettere che è piuttosto vecchio, e studiando ho trovato un codice che però non gira correttamente il codice trovato nel libro è il seguente:


#include <iostream>
using namespace std;
int main()
{
int grade;
int aCount=0,
bCount=0,
cCount=0,
dCount=0,
fCount=0;
cout<<"Enter the letter grades."<<endl
<<"Enter the EOF character to end input."<<endl;


while ((grade=cin.get()) != EOF) {
switch (grade) {
case 'A':
case 'a':
++aCount;
cout<<aCount<<endl;
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;
default:
cout<<"Incorrect letter grade entered."
<<"Enter a new grade."<<endl;
break;
}
}
cout << "\n\nTotals for each letter grade are:"
<<"\nA: "<<aCount
<<"\nB: "<<bCount
<<"\nC: "<<cCount
<<"\nD: "<<dCount
<<"\nF: "<<fCount<<endl;

return 0;

}  


con questo codice il valore di grade nello switch non viene memorizzzato correttamente sapete dirmi qual'è il problema e come risolverlo? ho modificato il codice come segue:


#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int grade;
char prova;
int aCount=0,
bCount=0,
cCount=0,
dCount=0,
fCount=0;
cout<<"Enter the letter grades."<<endl
<<"Enter the EOF character to end input."<<endl;

grade=cin.get();

while ((grade=cin.get()) != EOF) {

switch (grade=cin.get()) {
case 'A':
case 'a':
++aCount;
cout<<aCount<<endl;
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;
default:
cout<<"Incorrect letter grade entered."
<<"Enter a new grade."<<endl;
break;
}
}
cout << "\n\nTotals for each letter grade are:"
<<"\nA: "<<aCount
<<"\nB: "<<bCount
<<"\nC: "<<cCount
<<"\nD: "<<dCount
<<"\nF: "<<fCount<<endl;

return 0;

}  


e funziona parzialmente poichè il primo input non viene memorizzato nei count potete dirmi dove si trova il problema in tutte e due i codici?Grazie
aaa
03/04/10 12:04
Overflow
il codice che hai trovato sul libro è giusto, il problema è EOF che non viene riconosciuto. Io utilizzerei il tasto INVIO per fermare la lettura.
Quindi:
#include  <iostream>
#include <stdio.h>
using namespace std;
int main()
{
const int ENTER = 10;
int grade;
char prova;
int aCount=0,
	bCount=0,
	cCount=0,
	dCount=0,
	fCount=0;
	cout<<"Enter the letter grades."<<endl
	<<"Enter the EOF character to end input."<<endl;


	while ((grade=cin.get()) != ENTER) /* esco quando trovo il carattere di INVIO*/ 
	{
		switch (grade) 
		{
			case 'A':
			case 'a':
				++aCount;
				cout<<aCount<<endl;
				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;
			default:
				cout<<"Incorrect letter grade entered."
				<<"Enter a new grade."<<endl;
				break;
		}
	}
	cout << "\n\nTotals for each letter grade are:"
	<<"\nA: "<<aCount
	<<"\nB: "<<bCount
	<<"\nC: "<<cCount
	<<"\nD: "<<dCount
	<<"\nF: "<<fCount<<endl;

	return 0;

}  



il carattere INVIO diventa il tuo EOF.
Ultima modifica effettuata da Overflow 03/04/10 12:04
aaa