Come ho capito, l'operatore di estrazione salta lo spazio bianco all'inizio e si ferma quando incontra uno spazio bianco o una fine del flusso. i noskipws possono essere usati per smettere di ignorare gli spazi bianchi iniziali.Effetto di noskipws sul cin >>
Ho il seguente programma in cui ho usato noskipws.
#include <iostream>
using namespace std;
int main()
{
char name[128];
cout<<"Enter a name ";
cin>>noskipws>>name;
cout<<"You entered "<<name<<"\n";
cout<<"Enter another name ";
cin>>name;
cout<<"You entered "<<(int)name[0]<<"\n";
return 0;
}
Le mie domande sono:
Se entro "John", come il primo input, poi il secondo cin >> operazione non aspettare per l'input e non copia nulla al cioè di destinazione il nome dell'array. Mi aspettavo che il secondo cin >> trasferisse almeno una nuova riga o la fine del flusso, invece di impostare semplicemente la stringa di destinazione da svuotare. Perché sta succedendo ?
La stessa cosa si osserva quando inserisco "John Smith" come input per la prima istruzione cin >>. Perché la seconda istruzione cin >> copia lo spazio o "Smith" nella variabile di destinazione?
Ecco l'output del programma:
Enter a name John
You entered John
Enter another name You entered 0
Enter a name John Smith
You entered John
Enter another name You entered 0
Grazie !!!
Spero che tu sappia che si programma può produrre buffer overflow molto facilmente. Nel codice di produzione, non dovresti usare 'std :: cin' per scrivere in un array di caratteri. Usa invece 'std :: string'. – smerlin
Questo è vero. Il codice sopra era solo a scopo illustrativo. L'utilizzo di cin.width o cin.getline può evitare alcuni dei problemi di overflow, ma come hai detto std :: string sarebbe il migliore. Ho dato il codice di esempio sopra solo per mostrare cosa stavo cercando di chiedere. –