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 tempchar temp和而不是

if (temp.compare("exit") == 0) {
    break;
}

尝试

if (temp == 'e') {
    break;
}

如果您被迫检查您的字符串,则可以假定代码与给定的更改条件相同,就可以进入字符串流。声明字符串流stringstream os;以及其他变量(如tempetc),然后更改

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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C-带参数的计算器

来自分类Dev

C-带参数的计算器

来自分类Dev

C ++读取inFile,以逗号和空格分隔

来自分类Dev

C ++读取inFile,以逗号和空格分隔

来自分类Dev

在C ++中读取带空格的字符串

来自分类Dev

读取带空格的字符串,直到在C中换行

来自分类Dev

如何在C ++中读取带空格的文件?

来自分类Dev

在 C 中读取包含命令选项和参数的输入,以空格分隔

来自分类Dev

匹配带空格和不带空格的模式

来自分类Dev

C#计算器文本输入验证

来自分类Dev

C ++ istringstream和空格

来自分类Dev

使用简单的 JavaScript 计算带空格和不带空格的文本区域字符

来自分类Dev

变更计算器//苦苦挣扎的C和函数

来自分类Dev

C ++计算器程序

来自分类Dev

uniq -c,不带其他空格

来自分类Dev

如何使用相同的词法分析器提供带空格和不带空格的令牌流?

来自分类Dev

带空格的C ++星号循环程序

来自分类Dev

在 C 中取 N 个带空格的输入字符串

来自分类Dev

如何在 C 中避免空格、输入键或非数字输入?scanf 读取整数值

来自分类Dev

为什么C和计算器上的float计算结果不同?

来自分类Dev

用空格读取C中的文件.txt

来自分类Dev

我似乎无法让我的C程序接受输入(矩形棱镜计算器)

来自分类Dev

使用文本属性中的“&”从键盘输入的 C# 中的计算器

来自分类Dev

C程序-基本计算器

来自分类Dev

C#计算器给定的代码

来自分类Dev

C#项目简单计算器

来自分类Dev

呼叫Windows计算器c#

来自分类Dev

计算器Windows窗体C#

来自分类Dev

使用C ++创建计算器