循环,只要用户输入是给定的

  • 本文关键字:用户 循环 c++
  • 更新时间 :
  • 英文 :


我不知道如何在我的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>>symbolbuffer>>a;等从缓冲区读取。

最新更新