|
|||||||
|
|
|
![]() |
|
|
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: 09:05.





















