Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Errore programma
Forum - C/C++ - Errore programma

Avatar
perseo74 (Normal User)
Newbie


Messaggi: 7
Iscritto: 07/08/2009

Segnala al moderatore
Postato alle 15:54
Venerdì, 02/04/2010
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:


Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int grade;
  6. int aCount=0,
  7. bCount=0,
  8. cCount=0,
  9. dCount=0,
  10. fCount=0;
  11. cout<<"Enter the letter grades."<<endl
  12. <<"Enter the EOF character to end input."<<endl;
  13.  
  14.  
  15. while ((grade=cin.get()) != EOF) {
  16. switch (grade) {
  17. case 'A':
  18. case 'a':
  19. ++aCount;
  20. cout<<aCount<<endl;
  21. break;
  22. case 'B':
  23. case 'b':
  24. ++bCount;
  25. break;
  26. case 'C':
  27. case 'c':
  28. ++cCount;
  29. break;
  30. case 'D':
  31. case 'd':
  32. ++dCount;
  33. break;
  34. case 'F':
  35. case 'f':
  36. ++fCount;
  37. break;
  38. default:
  39. cout<<"Incorrect letter grade entered."
  40. <<"Enter a new grade."<<endl;
  41. break;
  42. }
  43. }
  44. cout << "\n\nTotals for each letter grade are:"
  45. <<"\nA: "<<aCount
  46. <<"\nB: "<<bCount
  47. <<"\nC: "<<cCount
  48. <<"\nD: "<<dCount
  49. <<"\nF: "<<fCount<<endl;
  50.  
  51. return 0;
  52.  
  53. }



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:


Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. int main()
  5. {
  6. int grade;
  7. char prova;
  8. int aCount=0,
  9. bCount=0,
  10. cCount=0,
  11. dCount=0,
  12. fCount=0;
  13. cout<<"Enter the letter grades."<<endl
  14. <<"Enter the EOF character to end input."<<endl;
  15.  
  16. grade=cin.get();
  17.  
  18. while ((grade=cin.get()) != EOF) {
  19.  
  20. switch (grade=cin.get()) {
  21. case 'A':
  22. case 'a':
  23. ++aCount;
  24. cout<<aCount<<endl;
  25. break;
  26. case 'B':
  27. case 'b':
  28. ++bCount;
  29. break;
  30. case 'C':
  31. case 'c':
  32. ++cCount;
  33. break;
  34. case 'D':
  35. case 'd':
  36. ++dCount;
  37. break;
  38. case 'F':
  39. case 'f':
  40. ++fCount;
  41. break;
  42. default:
  43. cout<<"Incorrect letter grade entered."
  44. <<"Enter a new grade."<<endl;
  45. break;
  46. }
  47. }
  48. cout << "\n\nTotals for each letter grade are:"
  49. <<"\nA: "<<aCount
  50. <<"\nB: "<<bCount
  51. <<"\nC: "<<cCount
  52. <<"\nD: "<<dCount
  53. <<"\nF: "<<fCount<<endl;
  54.  
  55. return 0;
  56.  
  57. }


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

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 14:04
Sabato, 03/04/2010
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:
Codice sorgente - presumibilmente C++

  1. #include  <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. int main()
  5. {
  6. const int ENTER = 10;
  7. int grade;
  8. char prova;
  9. int aCount=0,
  10.         bCount=0,
  11.         cCount=0,
  12.         dCount=0,
  13.         fCount=0;
  14.         cout<<"Enter the letter grades."<<endl
  15.         <<"Enter the EOF character to end input."<<endl;
  16.  
  17.  
  18.         while ((grade=cin.get()) != ENTER) /* esco quando trovo il carattere di INVIO*/
  19.         {
  20.                 switch (grade)
  21.                 {
  22.                         case 'A':
  23.                         case 'a':
  24.                                 ++aCount;
  25.                                 cout<<aCount<<endl;
  26.                                 break;
  27.                         case 'B':
  28.                         case 'b':
  29.                                 ++bCount;
  30.                                 break;
  31.                         case 'C':
  32.                         case 'c':
  33.                                 ++cCount;
  34.                                 break;
  35.                         case 'D':
  36.                         case 'd':
  37.                                 ++dCount;
  38.                                 break;
  39.                         case 'F':
  40.                         case 'f':
  41.                                 ++fCount;
  42.                                 break;
  43.                         default:
  44.                                 cout<<"Incorrect letter grade entered."
  45.                                 <<"Enter a new grade."<<endl;
  46.                                 break;
  47.                 }
  48.         }
  49.         cout << "\n\nTotals for each letter grade are:"
  50.         <<"\nA: "<<aCount
  51.         <<"\nB: "<<bCount
  52.         <<"\nC: "<<cCount
  53.         <<"\nD: "<<dCount
  54.         <<"\nF: "<<fCount<<endl;
  55.  
  56.         return 0;
  57.  
  58. }



il carattere INVIO diventa il tuo EOF.

Ultima modifica effettuata da Overflow il 03/04/2010 alle 14:04
PM Quote