Cómo significar no más entrada para string ss en el ciclo while (cin >> ss)

Usé “cin” para leer palabras del flujo de entrada, que me gusta

int main( ){ string word; while (cin >> word){ //do sth on the input word } // perform some other operations } 

La estructura del código es algo así como el anterior. Es comstackble. Durante la ejecución, sigo ingresando algo así como

 aa bb cc dd 

Mi pregunta es cómo terminar esta entrada? En otras palabras, supongamos que el archivo de texto es solo “aa bb cc dd”. Pero no sé cómo hacer para que el progtwig sepa que el archivo termina.

Tu código es correcto Si estuvieras ingresando de manera interactiva, necesitarías enviar un carácter EOF, como CTRL-D.

Este carácter EOF no es necesario cuando estás leyendo en un archivo. Esto se debe a que una vez que tocas el final de tu flujo de entrada, no queda nada para “cin” (porque la transmisión ya está cerrada), por lo que el ciclo while se cierra.

Como otros ya responden esta pregunta, me gustaría agregar este importante punto:

Dado que Ctrl-Z en Windows (y Ctrl-D en sistemas Unix) hace que EOF scope, y usted sale del ciclo while, pero fuera del ciclo while no puede leer más entradas, ya que el EOF ya se ha alcanzado.

Por lo tanto, para habilitar la lectura usando cin nuevamente, debe borrar el indicador de eof y todos los otros indicadores de falla, como se muestra a continuación:

 cin.clear(); 

¡Después de hacer esto, puede comenzar a leer la entrada usando cin una vez más!

 int main() { string word; while (cin >> word) { // do something on the input word. if (foo) break; } // perform some other operations. } 

Presiona Ctrl-Z (Ctrl-D en los sistemas * nix) y presiona enter. Eso envía un EOF e invalida la transmisión.

cin >> some_variable_or_manipulator siempre evaluará a una referencia a cin . Si desea verificar y ver si todavía hay más entradas para leer, debe hacer algo como esto:

 int main( ){ string word; while (cin.good()){ cin >> word; //do sth on the input word } // perform some other operations } 

Esto verifica el goodbit de la ruta, que se establece en verdadero cuando no se establece ninguno de los valores de eofbit, failbit o badbit. Si se produce un error al leer, o si la secuencia recibió un carácter EOF (al llegar al final de un archivo o desde el usuario en el teclado presionando CTRL + D), cin.good () devolverá false y saldrá de la lazo.

Supongo que quieres saltar al final del archivo. Puede obtener el valor de basic_ios :: eof , devuelve true al final de la transmisión.

Toma la entrada de un archivo. Luego encontrará que el ciclo while termina cuando su progtwig deja de tomar entrada. En realidad, cin deja de recibir información cuando encuentra un marcador EOF. Cada archivo de entrada finaliza con este marcador EOF. Cuando el operator>> encuentra este marcador EOF, modifica el valor del eofbit indicador eofbit en false y, en consecuencia, se detiene el ciclo while.

Me ayuda a terminar el ciclo presionando ENTER.

 int main() { string word; while(getline(cin,word) && s.compare("\0") != 0) { //do sth on the input word } // perform some other operations } 

Puede hacer una verificación de una palabra especial en la entrada. Fe “detener”:

 int main( ){ string word; while (cin >> word){ if(word == "stop") break; //do sth on the input word } // perform some other operations } 

su progtwig no tiene en cuenta los espacios en blanco. hacer la diferencia entre cin y getline …

Aquí hay un ejemplo con un truco: el progtwig recibe entrada e imprime la salida hasta que pulse dos veces Enter para salir:

 #include  #include  using namespace std; int main(){ char c = '\0'; string word; int nReturn = 0; cout << "Hit Enter twice to quit\n\n"; while (cin.peek()) { cin.get(c); if(nReturn > 1) break; if('\n' == c) nReturn++; else nReturn = 0; word += c; cout << word; word = ""; } cout << endl; return 0; }