2012-05-14 16 views

risposta

13

cin.ignore rigetti personaggi, fino al numero specificato, o fino a quando viene raggiunto il delimitatore (se inclusi). Se lo chiami senza argomenti, elimina un carattere dal buffer di input.

Ad esempio, cin.ignore (80, '\n') ignorerebbe o 80 caratteri o quanti ne trova finché non raggiunge una nuova riga.

cin.sync rigetti tutti i caratteri letti dal buffer di ingresso. Tuttavia, non è garantito farlo in ogni implementazione. Pertanto, ignore è una scelta migliore se si desidera la coerenza.

cin.sync() sarebbe solo chiaro che cosa sta a sinistra. L'unico uso che posso pensare per sync() che non può essere fatto con ignore è un sostituto per system ("PAUSE");:

cin.sync(); //discard unread characters (0 if none) 
cin.get(); //wait for input 

Con cin.ignore() e cin.get(), questo potrebbe essere un po 'di una miscela:

cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline 
//cin.get() 

Se ci fosse una nuova riga, basta mettere ignore sembrerà saltarlo. Tuttavia, mettendo entrambi attenderanno due input se non c'è una nuova riga. Scartare tutto ciò che non è letto risolve questo problema, ma, ancora una volta, non è coerente.

+0

puoi mostrarmi implementazioni specifiche che cin.sync non è sicuro! – 5fox

+1

@ 5fox: Posso mostrarti le implementazioni in cui non fa nulla: http://ideone.com/AR8lB –

+0

ignore() dovrebbe essere chiamato prima di cin o after cin? Per essere precisi, la prima volta quando vado per cin, devo scaricare dati indesiderati nel buffer, se ce ne sono? O programmerai il flush di tutto quando viene inserito main? Ma quello che ho notato è che se chiamiamo ignore(), attende per la prima volta un carattere non spaziale. – Rajesh