Torna indietro   Hardware Upgrade Forum > Software > Programmazione

GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-02-2012, 10:39   #1
legolas93
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;
	}
Questo è l'output

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?
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 12:36   #2
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
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.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 13:20   #3
legolas93
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é.
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:01   #4
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da legolas93 Guarda i messaggi
Anche cambiando con Char il programma non funziona. Le istruzioni del blocco default vengono eseguite in ogni caso e non capisco perché.
Ho fatto qualche prova.
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;
Poi ho usato:
Codice:
char grade
while (cin >> grade, grade != EOF)
ed ora funziona. Solo con char grade però, int grade manda tutto in loop. Ma non so quale carattere corrisponda a EOF quindi non so uscire

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().
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:12   #5
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
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);
	}
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:23   #6
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
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);
	}
Sisi lo so. Sto seguendo il Deitel e sto rifacendo a manina gli esempi. Sisi lo so che la vera media non si fa così! . Ora guardo il tuo esempio sopra
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:25   #7
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
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'
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:26   #8
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Ho fatto qualche prova.
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;
Poi ho usato:
Codice:
char grade
while (cin >> grade, grade != EOF)
ed ora funziona. Solo con char grade però, int grade manda tutto in loop. Ma non so quale carattere corrisponda a EOF quindi non so uscire

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().
Yaaa ..Avevo pensato anche io di farlo così. Solo che volevo capire perchè copiando l'esempio dal libro non funzionava.

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!
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:31   #9
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
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'
Hai ragione perchè come detto qua:

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!
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:54   #10
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da legolas93 Guarda i messaggi
Hai ragione perchè come detto qua:

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!
Dopo aver guardato anche la versione 8 e vedendo che il codice era uguale. Ho provato a fare qualche ricerca su internet e ho trovato questo su un forum inglese:

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
di modo che ignorasse i white space.

Che errore sciocco
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 15:02   #11
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da legolas93 Guarda i messaggi
Dopo aver guardato anche la versione 8 e vedendo che il codice era uguale. Ho provato a fare qualche ricerca su internet e ho trovato questo su un forum inglese:

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
di modo che ignorasse i white space.

Che errore sciocco

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.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 16:55   #12
legolas93
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 659
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi

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.
Sisi.. I know


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
legolas93 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 18:53   #13
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
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
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Il Telecomando Kobo è il nuovo ac...
Svolta erotica per ChatGPT: il chatbot p...
Oracle, patto di ferro con AMD su Instin...
Start Cup Puglia 2025: il 16 ottobre la ...
Incentivi auto elettriche, falsa partenz...
Silence crea anche in Francia una rete d...
La realtà mista al servizio degli...
Nothing ha un altro smartphone in progra...
Decisione storica ad Amburgo: i cittadin...
Questo è il nuovo motore elettric...
HUAWEI WATCH GT 6: lo smartwatch 'infini...
Fotografia con AI: ecco Caira, la macchi...
PlayStation 6 vs Xbox Magnus: il rumor s...
DJI Osmo Action 4 a soli 208€ su Amazon:...
Irion, la data governance diventa strate...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v