c++ - que - while loop java
While-loop se rompe, y no sé la razón por la cual (2)
Estaba escribiendo un código para un contador. Si doy ''a'' como entrada, debe +1 al contador y mostrarlo en la pantalla. Pero cuando lo hago, muestra 1 en la pantalla y el programa finaliza. Quiero que se ejecute hasta y a menos que le dé otro carácter como entrada. ¿Cuál es el error que estoy cometiendo?
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int Counter = 0;
char t;
while(true)
{
t = cin.get();
if(t == 97)
{
Counter = Counter + 1;
}
else
break;
system("cls");
cout << Counter;
}
return 0;
}
El problema es cuando ingresas tu ''a''
, probablemente también estés presionando Enter , que se interpreta como otro char
. Esa segunda char
definitivamente no es a
, entonces tu programa se rompe. Esto se puede verificar publicando lo que lees:
for (;;) {
std::cout << ''?'';
char t = std::cin.get();
std::cout << (int)t << ''/n'';
if (t != ''a'') break;
}
std::cout << "done/n";
Que, cuando se ejecuta, imprime:
?a
97 // this is ''a''
?10 // this is ''/n'', note the additional ?
done
La solución más simple sería usar el operador de flujo de entrada en cin
, que descartaría el espacio en blanco en la entrada (mientras que get()
no lo hace):
char t;
for (;;) {
std::cout << ''?'';
std::cin >> t;
std::cout << (int)t << ''/n'';
if (t != ''a'') break;
}
std::cout << "done/n";
Que, cuando se ejecuta, produce:
?a
97
?b
98
done
que es lo que pretendías
Prueba esto:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int Counter = 0;
char t;
while(true)
{
t = cin.get();
if(t == 97)
{
Counter = Counter + 1;
}
// else
// break;
system("cls");
cout << Counter;
}
//system("pause");
return 0;
}
Tu else break;
es la razón por la que estás cerrando después de cualquier interacción. Básicamente después de cualquier iteración, se romperá debido a cualquier entrada que no sea. Sin embargo, al ejecutar el código anterior, verá el incremento del contador en cada entrada dada y no se romperá.
Esto le dará la operación básica que está buscando, que es incrementar el contador en función de la entrada a, de lo contrario, no haga nada.
Editar: El código anterior almacenará en búfer tu entrada y la leerá todo, así que si tienes 5 a
''s como la siguiente aaaaa
, la leerá y sacará 5 para el contador.
Si quiere salir del círculo, le sugiero esto:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int Counter = 0;
char t;
while(true)
{
cin >> t;
// t = cin.get();
if(t == 97)
{
Counter = Counter + 1;
}
else
break;
system("cls");
cout << Counter;
}
//system("pause");
return 0;
}
Lo probé y funciona. Parece estar relacionado con cómo cin.get()
lee la entrada almacenada en búfer desde la consola (creo). No estoy seguro sobre los detalles, pero cin >> t
hace el truco.
Edición 2: cin.get()
poco y creo que cin.get()
consumirá el siguiente carácter después de tu entrada, pero en este caso es un espacio de noticias /n
, por lo que siempre se romperá en tu código original.