updateone update c++ syntax syntax-checking

c++ - update - cin.get() no funciona



update mongodb (2)

Escribí este sencillo programa hoy, pero descubrí que cin.get() niega a trabajar a menos que haya 2 de ellos. ¿Algunas ideas?

#include <iostream> using namespace std; int main(){ int base; while ((base < 2) || (base > 36)){ cout << "Base (2-36):" << endl; cin >> base; } string base_str = "0123456789abcdefghijklmnopqrstuvwxyz"; for (int i = 0; i < base; i++){ for (int j = 0; j < base; j++){ for (int k = 0; k < base; k++){ cout << base_str[i] << base_str[j] << base_str[k] << endl; } } } cin.get(); cin.get(); }

si muevo un cin.get() hasta antes de los bucles anidados, los bucles se ejecutan y luego pausa. si saco un cin.get() , el programa acaba. estoy usando la última versión del derramamiento de sangre c ++ dev


La base variable no se ha inicializado.

Puede solucionarlo dando un valor no válido a la base como:

int base = 1; // 1 is not in the valid range. while ((base < 2) || (base > 36)){

o

mejor use un ciclo do-while como:

int base; do{ cout << "Base (2-36):" << endl; cin >> base; } while ((base < 2) || (base > 36));

La razón por la que necesita el segundo cin.get() es que, después de leer el valor base usando cin , a /n queda en el búfer. La primera llamada a cin.get() consume ese /n y el segundo cin.get espera su entrada. Para evitar esto, debe limpiar el /n del búfer después de cin llamando a cin.ignore


No está inicializando la variable ''base'', pero mientras eso causa errores no está (directamente) relacionada con el comportamiento que está viendo con cin, aunque algunas veces, dependiendo del compilador, puede saltearse bucles . Probablemente esté construyendo en modo de depuración que inicializa cero o algo así.

Dicho eso, suponiendo que se haya solucionado:

Cuando escribe un valor (por ejemplo, 5) y presiona enter, los datos en la secuencia son 5<newline> - operator << no extrae la nueva línea de la secuencia, pero cin.get () sí lo hace. Su primer cin.get () extrae esa nueva línea de la secuencia, y la segunda espera espera la entrada porque la secuencia ahora está vacía. Si solo tuviera una llamada cin.get (), extraería inmediatamente la nueva línea y continuaría, y como no hay nada después de esa llamada cin.get (), el programa finaliza (como debería).

Parece que estás usando cin.get () para evitar que tu programa se cierre cuando se ejecuta desde el depurador; generalmente puede hacerlo a través de un comando específico de "inicio sin depuración" desde su IDE; entonces no necesitarás abusar de cin.get () para este propósito.