C++ 计算多个算术表达式

C++ 计算多个算术表达式,c++,C++,编写一个更好的计算器版本calc2.cpp,它可以计算多个算术表达式。让我们使用分号符号,该符号必须在输入中每个表达式的末尾使用 假设输入文件formulas.txt如下所示: 十五, 10+3+0+25 5+6-7-8+9+10-11 当我们使用该输入运行程序时,输出应计算所有表达式,并在各自的行上打印它们: $./calc2>总和; 而(cin>>opr>>值) { 开关(opr) { 格“+”:++ 总和+=数值; 打破 案例'-': 总和-=价值; 打破 } } cout我认为没有办法按

编写一个更好的计算器版本calc2.cpp,它可以计算多个算术表达式。让我们使用分号符号,该符号必须在输入中每个表达式的末尾使用

假设输入文件formulas.txt如下所示:

十五,

10+3+0+25

5+6-7-8+9+10-11

当我们使用该输入运行程序时,输出应计算所有表达式,并在各自的行上打印它们:

$./calc2 十五

三十八

四,

我一直在为char“;”设置一个循环,它可以对每一行进行重做计算。请帮忙,谢谢

#include<iostream>
#include<string>
using namespace std;

int main() {

    char opr;         
    int  value;
    int sum=0;
    cin >> sum;  


    while (cin >> opr >> value)
    {
        switch (opr)
        {
            case '+': ++
                sum += value;
                break;
            case '-':
                sum -= value;
                break;
        }
    }

    cout<<sum<<endl;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
char-opr;
int值;
整数和=0;
cin>>总和;
而(cin>>opr>>值)
{
开关(opr)
{
格“+”:++
总和+=数值;
打破
案例'-':
总和-=价值;
打破
}
}

cout我认为没有办法按照你说的做……因为你必须指定输入的结尾。否则编译器将无法确定输入,并且它将无限期地读取。因此你必须以某种方式指定输入的结尾。

你可以在
开关中添加一个额外的大小写来处理
';
和一个extra
default
case如果文件包含非法的运算符字符以捕获简单的打字错误

while (cin >> opr >> value)
{
    switch (opr)
    {
        case '+': 
            sum += value;
            break;
        case '-':
            sum -= value;
            break;
        case ';':
            cout<<sum<<endl;
            sum = value; // set first value of next equation as sum to set up for next 
            break;
        default:
            cerr << "Invalid operation! Exiting program!";
            return -1;
    }
}
阅读第15页

while (cin >> opr >> value)
读取;到
opr
中,并将第二个等式中的10值读取到
值中

switch (opr)
case '+'
运行

它打印出
sum
,将
sum
设置为10并循环回

while (cin >> opr >> value)
while (cin >> opr >> value)
它将+读入
opr
并将3读入

switch (opr)
case '+'
运行并将
sum
设置为10+3,然后循环返回到

while (cin >> opr >> value)
while (cin >> opr >> value)
它将;读入
opr
,然后由于没有要读取的
值而失败。这将在不打印任何内容的情况下退出

黑客修正是

while (cin >> opr >> value)
{
    switch (opr)
    {
        case '+': 
            sum += value;
            break;
        case '-':
            sum -= value;
            break;
        case ';':
            cout<<sum<<endl;
            sum = value; // set first value of next equation as sum to set up for next 
            break;
        default:
            cerr << "Invalid input! Exiting program!";
            return -1;
    }
}
cout<<sum<<endl;
while(cin>>opr>>值)
{
开关(opr)
{
格“+”:
总和+=数值;
打破
案例'-':
总和-=价值;
打破
格“;”:

能否提出解决问题的建议:

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
  int val;

  while (cin >> val)
  {
    string op;

    while (cin >> op)
    {
      if (op == ";")
      {
        cout << val << endl;
        break;
      }

      int num;

      if (! (cin >> num)) {
        cout << "a number is expected after '" << op << '\'' << endl;
        return -1;
      }

      if (op == "+")
      {
        val += num;
      }
      else if (op == "-")
      {
        val -= num; 
      }
      else {
        cout <<"invalid operator '" << op << '\'' << endl;
        return -1;
      }
    }
  }

  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int-val;
while(cin>>val)
{
字符串op;
而(cin>>op)
{
如果(op==“;”)
{
库特数){

cout看起来您正在做与相同的家庭作业。它是,但作业需要在没有的情况下完成。就操作员
>
而言,流就是流。无论您是否使用
cin
、文件、
stringstream
、网络套接字的包装器或其他任何方式。如果是ext结束
std::istream
,它会起作用。也就是说,看起来你对作业的解释是正确的。如果Intisar Ratul是同学,你应该帮他们一个忙,让他们知道他们误读了作业。