c++ - C++计算器,带空格和不带空格的读取输入

标签 c++

我正在写一个计算器程序。运行代码时,如果输入1 + 2作为输入,它将按预期运行并输出输出。但是,如果我输入1+2,该程序将不会打印输出。我想这样做,以便我可以输入带空格或不带空格的输入。我希望能够输入的输入示例包括1 +21+ 21 + 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 + 21+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/

相关文章:

c++ - 在 NS-3 中使用 Ramdomwaypoint 模型时如何设置位置分配器

c++ - 在C++中连接两个字符

c++ - 前向声明是行不通的

c++ - 获取(指向)调用对象

c++ - Visual C++ 2010 vector 调试 - 未显示内容

c++ - 在运行时链接的模型依赖目标

c++ - 在 Eigen 中填充稀疏矩阵非常慢

c++ - 无法打开包含文件 - 'gtest.h' - 没有这样的文件或目录

c++ - Qt 连接 lambda

c++ - 错误:QAction::triggered protected ——无法连接信号