我正在写一个计算器程序。运行代码时,如果输入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
etc),然后更改
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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句