#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”。我不明白为什么这样做,任何帮助将不胜感激。感谢
答案 0 :(得分:1)
让我们看看这个输入发生了什么的例子:
1
+
1
Enter
terminate = cin.peek();
这一行将查看缓冲区,读取其中的内容,但不会将其从缓冲区中删除
cin >> a >> operators >> b;
此行将显示1
+
1
并将其存储在a
operators
b
中,并从缓冲区中删除这些字符
现在你剩下的是Enter
键,它仍然在缓冲区中,下次你尝试读取缓冲区时会被读取,这是你下次调用的时候发出的{ {1}}您获得了terminate = cin.peek();
而不是您期望的\n
我注意到您可能尝试通过调用q
来解决该问题,但这不是该功能的作用。该函数会重置std::cin::clear
,这不是您要查找的内容。如果要清除缓冲区,则必须调用std::cin::ignore