Oppure

Loading
04/02/17 15:18
antoniodl
perche nel do while se a una variabile int compresa tra 1 e 31 da il valore di una lettere mi ripete all' infinito inserisci una variabile tra 1 e 31 senza fermarsi ?
aaa
04/02/17 15:32
Template
Riporta il codice qui mettendolo tra i tag CODE, spiega cosa dovrebbe fare... e poi vediamo: non è per sfiducia, ma nessuno con un minimo di cervello aprirebbe mai un'immagine ignota caricata da uno sconosciuto.
Ultima modifica effettuata da Template 04/02/17 15:34
aaa
04/02/17 15:57
a_butta
Postato originariamente da antoniodl:

perche nel do while se a una variabile int compresa tra 1 e 31 da il valore di una lettere mi ripete all' infinito inserisci una variabile tra 1 e 31 senza fermarsi ?


Non ho testato il codice, ma a sentimento una lettera è letta come char attraverso la codifica ASCII e quindi assume un valore numerico sicuramente maggiore di 31. Ergo, il ciclo continua fintantochè il numero non è compreso tra quei due estremi.

Comunque sia, correggi quanto affermato da Template. Diciamo che comunque la fiducia è data dal fatto che il link punta ad un allegato al forum stesso.

EDIT: Ok ho testato il programmino e ho notato che non è esattamente quello il problema. Intanto non capisco la presenza del break prima del cin, ad occhio deve essere eliminato. Avendo dichiarato la variabile giorno come int, il programma si aspetta che tu inserisca una variabile intera. Ho cercato un po' in giro su Internet per capire come effettivamente cin lavori, ma per questi dettagli aspetto qualcuno molto più competente di me; a quanto mi è parso di capire, la funzione (dovrebbe comunque dipendere dal compilatore e dall'implementazione) lavora su un thread a parte; quando esso va in errore credo non lanci una eccezione, ma semplicemente blocca la funzione cin. La variabile giorno viene posta a 0 e resta relegata a tale valore in quanto il cin è bloccato -> il ciclo non ha mai fine. Una soluzione semplice è quella di dichiarare giorno come char (tanto deve essere un numero inferiore di 32), così una lettera viene semplicemente interpretata come un carattere tra >32 e 127. Con un po' più di lavoro, sarebbe meglio far inserire sempre e comunque delle stringhe, verificarne la presenza di numeri e al limite lanciare un errore a video.
Ultima modifica effettuata da a_butta 04/02/17 16:29
aaa
04/02/17 16:19
Non conosco bene il c++, ma quel break??


cout>>...
break;
cin<<....


04/02/17 16:20
Doppio Post - Scusate
Ultima modifica effettuata da 04/02/17 16:21
04/02/17 16:23
nessuno
Subito dopo la cin, cancella eventuali input sbagliati, aggiungendo

cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
Ultima modifica effettuata da nessuno 04/02/17 16:23
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
04/02/17 16:30
a_butta
Ho modificato la risposta di cui sopra. Credo nessuno abbia suggerito una soluzione più efficace :asd:
aaa