Grazie..chiarissimoPerché 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".
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?
codice:while(cin.get()!='\n');
oppure
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