Da quello che so su noskipws
, disabilita il salto di spazi bianchi. Quindi si deve prendere degli spazi bianchi con qualche carattere nel loro programma se vogliono lavorare con noskipws
. Io cerco di impostare la condizione cin
-eof
premendo Ctrl + D (Ctrl +Z per Windows). Ma se uso un input char
o string
, lo stream è impostato alla fine del file con un singolo input. Tuttavia, se uso qualche altro tipo di dati, mi impone di premere due volte la combinazione. Se rimuovo la richiesta noskipws
, tutto il resto funziona correttamente. Il codice seguente illustra il problema più precisamente:C++: noskipws ritarda la fine del rilevamento di file per alcuni tipi di dati
#include <iostream>
using namespace std;
int main()
{
cin >> noskipws; //noskipws request
int number; //If this int is replaced with char then it works fine
while (!cin.bad()) {
cout << "Enter ctrl + D (ctrl + Z for windows) to set cin stream to end of file " << endl;
cin >> number;
if (cin.eof()) {
break; // Reached end of file
}
}
cout << "End of file encountered" << endl;
return 0;
}
Perché cin
comportando in questo modo? Sebbene non sia in grado di inserire l'input nella variabile int
, è necessario impostare i flag su eof
immediatamente dopo aver ricevuto la richiesta. Perché richiede un secondo input anche dopo che l'utente preme Ctrl + Z?
Puoi dire chiaramente quale input stai fornendo per produrre il comportamento imprevisto con questo codice –
premo ctrl + Z in console e la console richiede un altro input –
duplicato tra siti: [Equivalente a^D (in bash) per cmd.exe?] (https://superuser.com/questions/291224/equivalent-to-d-in-bash-for-cmd-exe) –