我不知道如何在我的while循环中编写正确的条件。我希望我的程序循环,只要用户将给出一个输入值。因此,用户给出值,程序打印结果并再次询问相同的问题。当用户不给任何输入,只是按下回车键,我希望我的程序完成。下面是我的代码:
#include <iostream>
using namespace std;
int main(){
int a,b;
string symbol;
while(true){
cin>>symbol;
if(symbol=="+"){
cin>>a;
cin>>b;
cout<<a+b<<endl;
}
else if(symbol=="-"){
cin>>a;
cin>>b;
cout<<a-b<<endl;
}
else if(symbol=="*"){
cin>>a;
cin>>b;
cout<<a*b<<endl;
}
else if(symbol=="/"){
cin>>a;
cin>>b;
cout<<a/b<<endl;
}
else if(symbol=="%"){
cin>>a;
cin>>b;
cout<<a%b<<endl;
}
}
}
我知道这段代码可能写得很糟糕,但我只是想让它工作。
你要求基于行的输入,你说当用户不给任何输入,只是按下回车键,我希望我的程序完成。但是您正在使用的输入法cin >> symbol;
跳过所有空格和换行符。所以它不能满足你的要求。
因为你想读取输入行,你应该使用一些可以读取输入行的东西。该函数为getline
。
string line;
getline(cin, line);
但是现在你有另一个问题,你如何从字符串line
中读取符号和数字?
为此您需要使用istringstream
。字符串流是从字符串中读取的对象,而不是像cin
那样从控制台读取。下面是如何使用它
#include <sstream>
string line;
getline(cin, line);
if (line.empty()) // check if any input
break; // and quit if not
istringstream buffer(line); // create the string stream
buffer>>symbol; // and read the symbol from it
if(symbol=="+"){
buffer>>a;
buffer>>b;
cout<<a+b<<endl;
}
...
查看line
字符串如何创建buffer
,然后使用buffer>>symbol
和buffer>>a;
等从缓冲区读取。