我正在写一个计算器程序。运行代码时,如果输入1 + 2
作为输入,它将按预期运行并输出输出。但是,如果我输入1+2
,该程序将不会打印输出。我想这样做,以便我可以输入带空格或不带空格的输入。我希望能够输入的输入示例包括1 +2
,1+ 2
和1 + 2
。有人可以解释或演示为什么我的代码不能与1+2
等输入一起使用,而与1 + 2
一起使用的原因。这是我的代码:
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main() {
char op;
double num1, num2;
int sub1, sub2;
std::string temp;
while (true) {
cin >> temp;
if (temp.compare("exit") == 0) {
break;
}
else{
num1 = std::stod(temp);
}
cin >> op >> num2;
switch (op) {
case '+':
cout << num1 + num2 << endl;
break;
case '-':
cout << num1 - num2 << endl;
break;
case '*':
cout << num1 * num2 << endl;
break;
case '/':
cout << num1 / num2 << endl;
break;
case '%':
sub1 = num1;
sub2 = num2;
cout << sub1 % sub2 << endl;
break;
case '^':
cout << pow(num1, num2) << endl;
break;
}
}
return 0;
}
最佳答案
您正在字符串上使用第一个cin。当您在控制台中输入1 + 2时,整个“1 + 2”将被视为一个字符串并被输入。当您输入1 + 2时,temp变量将仅以“1”作为输入,字符串以空格分隔。快速修复可能是
将std::string temp
更改为char temp
而不是
if (temp.compare("exit") == 0) {
break;
}
尝试if (temp == 'e') {
break;
}
如果您被迫检查您的字符串,则可以假定代码与给定的更改条件相同,就可以进入字符串流。声明字符串流stringstream os;
以及其他变量(例如temp
等),然后更改else{
num1 = std::stod(temp);
}
至else{
os << temp;
}
这会将您的字符串转换为字符串流。我建议您使用getline()将整个输入作为一个字符串来覆盖1 + 2
和1+2
两种情况之后,将
cin
替换为os
,这将有效地按预期方式分离数据可能的解决方案
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <sstream>
#include <string>
using namespace std;
char op ='a';
double num1, num2, num3 =0 ;
int sub1, sub2 = 0;
std::string temp;
int main() {
while (true) {
getline(cin, temp);
if (temp.compare("exit") == 0) {
break;
}
std::stringstream os (temp);
os >> num1 >> op >> num2 ;
switch (op) {
case '+':
cout << num1 + num2 << endl;
break;
case '-':
cout << num1 - num2 << endl;
break;
case '*':
cout << num1 * num2 << endl;
break;
case '/':
cout << num1 / num2 << endl;
break;
case '%':
sub1 = num1;
sub2 = num2;
cout << sub1 % sub2 << endl;
break;
case '^':
cout << pow(num1, num2) << endl;
break;
}
}
return 0;
}
关于c++ - C++计算器,带空格和不带空格的读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64456300/