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.