Perché se scanf non riesce a convertire dei caratteri forniti in input nel formato specificato, i caratteri in questione rimangono nel buffer di input. Il ciclo in questione scarta tutti i caratteri rimanenti sulla riga, il che consente di ripartire con un buffer "pulito".Originariamente inviato da Marco1995
Complimenti..intendevo proprio così..ma puoi spiegarmi il perchè di
In pratica ignora tutti i caratteri finchè non viene premuto l'invio?Perchè è necessario ignorarli?codice:while(getchar()!='\n');
l'operatore >> di istream restituisce lo stream stesso (altrimenti non sarebbe possibile concatenare più estrazioni con >>). Per verificare se l'estrazione di un valore è fallita puoi controllare il valore restituito dal metodo fail(). L'equivalente di quel ciclo di prima può essere:Inoltre ho provato a fare la stessa cosa con cin (C++)...però nella riga in cui faccio
mi dice "Invalid conversion from void to int"...codice:i = cin >> n; //ho provato anche a mettere i = (cin >> n)
Ho provato ad esplicitare un cast..ma mi da errore dicendomi in pratica che non posso "castare" ..
Forse non è questa la strada da adottare..suggerimenti?
oppurecodice:while(cin.get()!='\n');
Questo secondo metodo ha il vantaggio di evitare di andare in loop se lo stream di input termina o va in errore (si può comunque aggiustare anche l'altro metodo).codice:cin.ignore(numeric_limits<streamsize>::max(), '\n' );

Rispondi quotando