Ciao ,
Mettere il while all'inizio non mi permette più di uscire immettendo un valore pari a zero.
Ho fatto un pò di ricerca e ho scoperto
stoi(string)
Sfruttando l' eccezione che si verifica quando tentiamo di convertire un intero su un input di tipo string in un int,
posso gestire l'uscita con la lettera 'f'
Quindi non occorre solo aspettare di arrivare a
max ma ci si può fermare prima , oppure uscire subito se non si
ha digitato nessun numero.
Il return 0; mi lascia perplesso non so se conviene utilizzarlo in quel modo
#include "pch.h"
#include <iostream>
#include <vector>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
const int max = 1000;
vector<int> pari; // contiene l'elenco dei numeri pari
vector<int> dispari; // contiene l'elenco dei numeri dispari
vector<int>::iterator it; // iterum
cout << "Inserisci un numero per volta fino a raggiungere il totale di " << max << " (f=termina)" << endl;
cout << endl;
int numb = 0;
int contNumb = 0;
int modulo = 0;
float totale = 0.0;
string userInput;
while (totale <= max) {
cout << "Il totale in questo momento : " << totale << endl;
cout << ">";
//Ottiene un nuovo numero
cin >> userInput;
// Se viene digitata un lettera , crea una eccezione
try
{
numb = stoi(userInput);
}
catch (const std::exception& e)
{
// Se la lettera è la 'f' o 'F' esce dal programma
if (tolower(userInput[0]) == 'f') {
// Se non è stato digitato nessun numero esce altrimenti calcola la media
// con i valori fino a quel momento disponibili
if (contNumb == 0) {
cout << "Hai scelto di uscire dal programma digitando " << userInput[0] << endl;
return 0;
}
else break;
}
}
// conta gli addendi
contNumb++;
// controlla se è divisibile per due
modulo = numb % 2;
//modulo = 0 il numero è pari , altrimenti è dispari
(!modulo) ? pari.push_back(numb): dispari.push_back(numb);
// Somma ogni numero inserito dall'utente
totale += numb;
} // end of while
cout << endl;
cout << "Hai raggiunto il totale di " << totale << endl;
cout << endl;
cout << "Il risultato della media : " << fixed << setprecision(3) << totale / contNumb << endl ;
cout << endl;
cout << "I numeri pari inseriti sono :" << endl;
for (it = pari.begin(); it != pari.end(); it++) {
cout <<*it << ' ';
}
cout << endl;
cout << "I numeri dispari inseriti sono :" << endl;
for (it = dispari.begin(); it != dispari.end(); it++) {
cout << *it << ' ';
}
cout << endl;
return 0;
}