Migliore risposta
Qui chiarirai di più con Cin
Utilizzo , cin.get , cin.getline e cin. ignora
Utilizzando loperatore >> (con cin)
Il> Loperatore> può essere utilizzato quando si desidera semplicemente leggere i successivi caratteri non spazi vuoti inseriti dallutente in un carattere o in un array di caratteri. Qualsiasi carattere stampabile che segue il primo spazio verrà ignorato e non verrà memorizzato nella variabile. Non usa unistruzione come
cin >> UserExplanation;
se, ad esempio, desideri per ottenere una frase intera dallutente che include spazi. In tal caso, sarebbe meglio utilizzare le funzioni membro cin get o getline .
Domanda : un terminatore nullo verrà automaticamente memorizzato alla fine della matrice di caratteri, UserExplanation?
Uso di cin.get
La funzione get member non formattata funziona come loperatore >> con due eccezioni. Innanzitutto, la funzione get include caratteri di spazio vuoto , mentre lestrattore esclude lo spazio bianco quando è impostato il flag ios :: skipws (impostazione predefinita). In secondo luogo, è meno probabile che la funzione get causi lo svuotamento di un flusso di output legato (cout, ad esempio).
Una variazione della funzione get specifica un indirizzo di buffer e il numero massimo di caratteri da leggere. Ciò è utile per limitare il numero di caratteri inviati a una variabile specifica, come mostra questo esempio:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
In questo esempio, puoi digitare fino a 24 caratteri e un carattere di terminazione. Eventuali caratteri rimanenti possono essere estratti in seguito.
Utilizzo di cin.getline
La funzione membro getline è simile alla ottenere la funzione. Entrambe le funzioni consentono un terzo argomento che specifica il carattere di terminazione per linput. Il valore predefinito è il carattere di nuova riga. Entrambe le funzioni riservano un carattere per il carattere di terminazione richiesto . Tuttavia, get lascia il carattere di terminazione nello stream e getline rimuove il carattere di terminazione.
Lesempio seguente specifica un carattere di terminazione per linput stream:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
Utilizzo di cin.ignore
cin.ignore (int nCount = 1, int delim = EOF);
Parametri
nCount - Il numero massimo di caratteri da estrarre. delim - Il carattere delimitatore (il valore predefinito è EOF).
Osservazioni
Estrae e scarta fino a nCount caratteri. Lestrazione si interrompe se viene estratto il delimitatore delimitatore o viene raggiunta la fine del file. Se delim = EOF (il valore predefinito), solo la condizione di fine file causa la terminazione. Il carattere delimitatore viene estratto.
Risposta
cin.ignore () è una funzione predefinita che ignora / cancella uno o più caratteri dal buffer di input.
Prerequisiti: 1. cin considera uno spazio bianco, ad esempio " ", " \ t ", " \ n " come carattere delimitatore.
2. Quando leggi qualsiasi cosa dal dispositivo di input standard, tastiera qui, prima va nel buffer di input. Il buffer di input è una posizione che contiene tutte le informazioni in arrivo prima continua alla CPU per lelaborazione.
Il problema: 1. Supponi di voler leggere una "stringa" dallutente. char myname [10];
2. In qualche modo finisci per usare cin, invece di cin.getline () cin >> myname;
3. Digito "ABC", quindi premo il tasto Invio. occupa ABC e considera il seguente "\ n" come delimetro.Di conseguenza, "\ n" non viene letto e rimane nel buffer di input.
4. Quindi qui, cin.ignore () ignorerà questi caratteri non letti che sono rimasti nel buffer di input.
La soluzione: Se vuoi evitare situazioni, tieni presente solo di non usare cin per inserire stringhe. e tada, problema risolto !!