#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
回车
terminate = cin.peek();
这一行将查看缓冲区,读取其中的内容,但不会将其从缓冲区中删除
cin >> a >> operators >> b;
这一行会读取1
+
1
并存储在a
operators
b
并从缓冲区中删除这些字符
现在您剩下的是仍在缓冲区中的 Enter
键,下次您尝试读取缓冲区时将读取它,这就是您下次发出的地方你调用 terminate = cin.peek();
你得到的是 \n
而不是你期望的 q
我注意到您可能已尝试通过调用 std::cin::clear
来解决该问题,但这不是该函数的作用。该函数会重置 iostate 标志
,而这不是您要查找的内容。如果你想清除缓冲区,那么你必须调用 std::cin::ignore
关于c++ - 循环重复次数超过应有次数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22998357/