Problema con ciclo while controllato da sentinella

di Anonimizzato17859 il
6 risposte
Salve, mi sto approcciando da poco al C++ e ho trovato molto interessante questo forum. Il mio ambiente di lavoro è eclipse. Ho un problema con un programma: il programma deve permette l'inserimento di un indefinito numero di venditori e di 10 numeri, che rappresentano le vendite, per ciascuno; deve poi valutare la vendita migliore del singolo venditore e la vendita migliore tra tutti i venditori e individuare il venditore migliore tra tutti. Il mio programma ha due errori: il primo è che il ciclo non riconosce il valore sentinella del while, infatti continua anche se inserisco -1. Il secondo problema è che il programma che ho fatto non attribuisce al singolo venditore la sua vendita massima, infatti se il venditore inserito successivamente ha vendite inferiori al primo, il programma attribuisce al secondo venditore la vendita massima del primo. Non riesco a capire perchè il programma non riconosca il valore sentinella, ne ho fatti altri e hanno funzionato ma non riesco a capire quale sia il mio errore stavolta.

#include <iostream>
using namespace std;

int main() {
	int vendite;
	int venditaMax = 0;
	int venditaMaxTot = 0;
	int codiceVenditore;
	int Vincitore;

    while (codiceVenditore != -1) {
		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
		cin >> codiceVenditore;

		cout << "Inserire il numero di vendite " << endl;
		cin >> vendite;

		for(int contatoreVendite = 1; contatoreVendite <= 10; ++contatoreVendite) {
			cout << "Inserire il numero di vendite successivo" << endl;
			cin >> vendite;

			if (vendite > venditaMax)
				venditaMax = vendite;

		}

		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
	}

			if (venditaMax > venditaMaxTot) {
				venditaMaxTot = venditaMax;
			    Vincitore = codiceVenditore; }



	cout << "Il vincitore è il venditore n° " << Vincitore << "con " << venditaMaxTot << "vendite" << endl;

	return 0;
}

6 Risposte

  • In che senso non riconosce il valore sentinella?
  • Se digito il valore sentinella il ciclo va avanti come se avessi digitato un qualsiasi altro valore invece di bloccarsi e andare oltre il while.
  • E' naturale che va avanti dato che la while viene testata all'inizio del ciclo e non dopo la cin.
  • Ok, grazie mille, ho risolto il primo problema di questo programma, eccolo funzionante
    #include <iostream>
    using namespace std;
    
    int main() {
    	int vendite;
    	int venditaMax = 0;
    	int codiceVenditore;
    
    
    	cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    	cin >> codiceVenditore;
    
        while (codiceVenditore != -1) {
        	cout << "Inserire il numero di vendite " << endl;
    		cin >> vendite;
    
    			for(int contatoreVendite = 2; contatoreVendite <= 10; ++contatoreVendite) {
    				cout << "Inserire il numero di vendite successivo" << endl;
    				cin >> vendite;
    		}
    
    			if (vendite > venditaMax)
    				venditaMax = vendite;
    
    		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
    		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    		cin >> codiceVenditore;
        }
    
    	return 0;
    }
    
    Ora il secondo problema è che il programma che ho fatto non attribuisce al singolo venditore la sua vendita massima, infatti se il venditore inserito successivamente ha vendite inferiori al primo, il programma attribuisce al secondo venditore la vendita massima del primo. Suggerimenti?
  • La if va fatta per ogni input delle vendite, non solo alla fine
  • Ok, grazie mille, ho inserito la if nel ciclo for. Ecco il codice corretto
    #include <iostream>
    using namespace std;
    
    int main() {
    	int vendite;
    	int venditaMax = 0;
    	int codiceVenditore;
    
    
    	cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    	cin >> codiceVenditore;
    
        while (codiceVenditore != -1) {
        	cout << "Inserire il numero di vendite " << endl;
    		cin >> vendite;
    		venditaMax = vendite;
    
    			for(int contatoreVendite = 2; contatoreVendite <= 10; ++contatoreVendite) {
    				cout << "Inserire il numero di vendite successivo" << endl;
    				cin >> vendite;
    
    				if (vendite > venditaMax)
    				venditaMax = vendite;
    			}
    
    		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
    		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    		cin >> codiceVenditore;
        }
    
    	return 0;
    }
    
    
    
Devi accedere o registrarti per scrivere nel forum
6 risposte