Quote:
Originariamente inviato da uomoserio
Domanda 1: nella funzione insNumero(), ho usato un metodo spicciolo per controllare che il valore immesso sia compreso fra 1 e 100, così se l'utente immette dei caratteri invece di numeri il controllo comunque lo blocca (altrimenti il programma si impalla di brutto!). Ma se io avessi voluto verificare a priori il tipo immesso dall'utente (caratteri o numeri) come dovevo fare?
|
Avresti dovuto usare funzioni a più basso livello e non standard, es. getch() o le API Win32 se stai lavorando su Windows.
Quote:
Originariamente inviato da uomoserio
Domanda 2: per evitare i soliti problemi con i caratteri rimanenti nel buffer di immissione, dopo ogni inserimento da parte dell'utente ho usato fflush(stdin) per svuotare il buffer ed evitare che all'immisione successiva venissero presi eventuali caratteri residui. Questo è un sistema corretto? Oppure esiste un sistema migliore per controllare l'eccedenza del buffer di stdin? Inoltre la funzione fflush(stdin) l'ho trovata cercando nei forum....ma possibile che nessun manuale di C/C++, fra le decine che possiedo, si degni di spiegare queste cose? Eppure il problema della ingestibilità del buffer di input è un problema molto diffuso, a quanto leggo in giro....
|
fflush(stdin) non va molto bene. Secondo le specifiche, fflush va usato solo con stream di output, perché con stream di input il comportamento è indefinito (sebbene in alcuni ambienti fa proprio quello che vuoi, cioè pulire il buffer di input).
Ci sono altri modi per eliminare i caratteri in più:
- Fare un ciclo
while(getchar() != '\n');
- Evitare scanf

e usare fgets/sscanf
Quote:
Originariamente inviato da uomoserio
Domanda 3: per ora il programma è scritto in C, usando le funzioni standard printf e scanf. Ma se io avessi voluto rimanere sul C++ e usare cin per le immissioni dell'utente, in che modo si utilizza esattamente? So che la forma generale con l'operatore estrattore è "cin >> variabile", ma in che modo posso formattare l'input (come ad esempio"%u" in scanf) per essere sicuro che mi restituisca un valore e non un carattere?
|
In effetti hai fatto un po' un mix ... hai usato roba del "C" (scanf, printf) ma poi hai incluso roba del C++. Evita questi mix.