循环重复次数超过应有次数的问题
Issue with loop repeating one more time than it should
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
char terminate;
double a, b, answer;
char operators;
cout << "Please enter your expression: ";
terminate = cin.peek();
cin >> a >> operators >> b;
while (terminate != 'q')
{
switch(operators)
{
case '+':
answer = a + b;
break;
case '-':
answer = a - b;
break;
case '*':
answer = a * b;
break;
case '/':
answer = a / b;
break;
case '^':
answer = pow(a,b);
break;
}
cout << a << " " << operators << " " << b << " = " << answer << endl;
cout << "Please enter your expression: ";
cin.clear();
terminate = cin.peek();
cin >> a >> operators >> b;
}
return 0;
}
这是我的简单计算器程序,它旨在重复并要求用户输入一个二进制表达式,直到输入值"q",然而,在输入"q"时,while循环仍然会再次执行,即使变量terminate的值为"q"。我不明白它为什么这么做,任何帮助都将不胜感激。感谢
让我们看看这个输入发生了什么的例子:
1
+
1
Enter
terminate = cin.peek();
这一行将窥探缓冲区,读取那里的内容,但不会将其从缓冲区中删除
cin >> a >> operators >> b;
该行将读取1
+
1
并将其存储在a
operators
b
中,并从缓冲区中删除这些字符
现在你剩下的是Enter
密钥,它仍然在缓冲区中,下次你尝试读取缓冲区时会读取它,这就是你发出的地方,因为下次你调用terminate = cin.peek();
时,你得到的是n
,而不是你期望的的q
我注意到您可能试图通过调用std::cin::clear
来解决这个问题,但该函数并不是这样做的。该函数会重置iostate flags
,而这不是您想要的。如果您想清除缓冲区,则必须调用std::cin::ignore
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 在java中解决这段代码时面临循环中的问题
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 退出简单while循环时出现问题
- 循环无限运行C++解决骑士之旅问题
- Visual Studio 2017循环自动向量化问题
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 嵌套While循环不起作用(C++问题)
- 使用 GMP 的 while 循环出现问题
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- OpenMP for 循环并行性问题
- 这个返回元素位置的基于循环的函数有什么问题?
- 为什么循环会导致指针出现问题?
- 使用基于范围的循环迭代矢量时出现问题
- 在 c++ 中循环遍历数组时遇到问题
- 运行无限循环的最小二叉树问题
- 在C++中循环访问自定义结构列表的小问题
- 在 for 循环中更新两个变量时遇到问题C++