Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Intel: fine delle ricompense fino a 100....
Un problema alle turbopompe potrebbe ral...
Jensen Huang, NVIDIA: 'Nel 2030 non fini...
PC rincondizionato Lenovo ThinkStation a...
Il Neural Rendering di DLSS 5 gira (male...
AMD Radeon RX 9050 4GB, ecco quanto perd...
Factorio è certificato Steam Frame: la b...
TECLAST ArtPad è attualmente il m...
Bose aggiorna la sua gamma con due nuovi...
ID. Buzz, 100.000 km intorno al mondo se...
OpenAI: due computer isolati si parlano ...
Il caso del bambino che ha speso 118.000...
EPYC Venice contro Xeon e Vera: AMD pubb...
Apple potrebbe aumentare ancora i prezzi...
Il cervello di moscerino virtuale ha imp...
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: 09:05.


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