|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
[C++] Switch
Codice:
/* * TestGradeBook.cpp * * Created on: 07/feb/2012 * Author: andrea */ #include <iostream> #include "GradeBook.h" using namespace std; int main() { GradeBook gradeBook1("Il corso uno è troppo lunga da scrivere e quindi verra automaticamente tagliato"); gradeBook1.displayCourse(); cout << "\n"; gradeBook1.inputGrades(); gradeBook1.displayGradeReport(); return 0; } Codice:
/* * GradeBook.h * * Created on: 07/feb/2012 * Author: andrea */ #include <string> using namespace std; class GradeBook{ private: string courseName; string instructorName; int aCount; int bCount; int cCount; int dCount; int eCount; int fCount; public: void setCourseName(string); string getCourseName(); GradeBook(string); void displayCourse(); void determineClassAverage(); void inputGrades(); void displayGradeReport(); }; Codice:
/* * GradeBook.cpp * * Created on: 07/feb/2012 * Author: andrea */ #include <iostream> #include <cstdio> #include "GradeBook.h" using namespace std; void GradeBook::setCourseName(string name) { if(name.length() <= 25) courseName = name; else { courseName = name.substr(0,25); cout << "Nome troppo lungo" << endl; } } string GradeBook::getCourseName() { return courseName; } /* void GradeBook::setInstructorName(string name) { instructorName = name; } string GradeBook::getInstructorName(){ return instructorName; } */ GradeBook::GradeBook(string name) { setCourseName(name); aCount = 0; bCount = 0; cCount = 0; dCount = 0; fCount = 0; } void GradeBook::displayCourse() { cout << getCourseName() << endl; } void GradeBook::determineClassAverage() { int gradeCounter = 1; int total, grade; total = 0; while(gradeCounter<=10) { cout << "Enter grade: " << endl; cin >> grade; total = total + grade; gradeCounter = gradeCounter +1; } cout << "The average is " << (total/10); } void GradeBook::inputGrades() { int grade; cout << "Enter the Letter Grade: " << endl << "Enter the EOF character to end input " << endl; while ((grade = cin.get()) != 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 'e': case 'E': eCount++; break; case 'f': case 'F': fCount++; break; default: cout << "Incorrect Letter Grade entered" << "\n Enter a new grade: " << endl; break; } } } void GradeBook::displayGradeReport(){ cout << "\n\nNumber of students who received each Letter Grade:" << "\nA: " << aCount << "\nB: " << bCount << "\nC: " << cCount << "\nD: " << dCount << "\nE: " << eCount << "\nF: " << fCount << endl; } Codice:
Nome troppo lungo Il corso uno è troppo lu Enter the Letter Grade: Enter the EOF character to end input a Incorrect Letter Grade entered Enter a new grade: d Incorrect Letter Grade entered Enter a new grade: a Incorrect Letter Grade entered Enter a new grade: A Incorrect Letter Grade entered Enter a new grade: ![]() Perchè mi dice che anche caratteri come A e a sono sbagliati ![]() Avete qualche idea ragazzi? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Non ho il pc sotto mano ma grade è un int.
cin dovrebbe convertire il carattere immesso ad un int corrispondente tratto dalla tabella ASCII, ma poi case riconverte grade in char per il confronto? Cmq se metti char grade è tutto molto più intuitivo e naturale, a prescindere che funzioni o no. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
Anche cambiando con Char il programma non funziona. Le istruzioni del blocco default vengono eseguite in ogni caso e non capisco perché.
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Innanzitutto ho notato che col tuo programma se in input dai aaa, in una sola botta aCount va su di 3, verificato così: Codice:
default: cout << "Incorrect Letter Grade entered " << aCount << " " << bCount << "\n Enter a new grade: " << endl; // break; Codice:
char grade while (cin >> grade, grade != EOF) ![]() Cmq anch'io ho sbattuto la testa varie volte con cin, e ancora non ho imparato bene come usare >> e altre funzioni come get() o read(). |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Inoltre qui la media la calcoli come divisione tra interi:
Codice:
void GradeBook::determineClassAverage() { int gradeCounter = 1; int total, grade; total = 0; while(gradeCounter<=10) { cout << "Enter grade: " << endl; cin >> grade; total = total + grade; gradeCounter = gradeCounter +1; } cout << "The average is " << (total/10); } |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Ci sono:
tu inputti "a[invio]", e cin contiene proprio quei due caratteri. La prima volta grade = 'a', la seconda volta non ti fa immettere il carattere e grade = '\n' perchè cin ha dentro un "rimasuglio". Per questo motivo quando prima scrivevo aaa[invio] aCount andava su di 3. A quanto pare devi usare >> perchè quest'operatore scarta da solo il carattere '\n' |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
Quote:
![]() ![]() Sono sicuro di non aver fatto errori di battitura quindi ad occhio direi che è il libro un po... ![]() Ora cerco da qualche parte come funziona il get() Grazie! PS: se avete qualche idea di cosa intenda il libro postate pure! |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
Quote:
http://www.cplusplus.com/reference/i...m/istream/get/ get() estrae un carattere per volta e penso che prenda anche i whitespace. Ora guardo se sull'8 versione del Deitel hanno corretto sto errore.. ![]() Grazie! ![]() |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
Quote:
http://www.sysopt.com/forum/archive/.../t-157787.html e io come lui non avevamo notato che tra i case c'era anche: Codice:
case '\n': // ignore newlines, case '\t': // tabs, case ' ': // and spaces in input break; // exit switch ![]() Che errore sciocco ![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
![]() Cmq anche con cin >> grade se scrivi aaa[invio] aCount va su di 3. Per questi esercizi va bene ma in un programma serio ci vuole un controllo serio dell'input mi sa. Ultima modifica di vendettaaaaa : 07-02-2012 alle 15:04. |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 659
|
Quote:
![]() Questo era solo un esercizio per far vedere come funzionava lo Switch. Dai che prima o poi arriverò a fare qualcosa di seriooo ![]() Mi manca ancora qualcosa come 800 pagine più tutta l'esperienza sul campo ![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Ah, a me 200 pagine di un libro, 1200 di un altro solo per il C++
Poi ci sono i libri sulle Qt...e l'esperienza sul campo ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:41.