编写一个更好的计算器版本calc2.cpp,可以计算多个算术表达式。让我们使用在输入中每个表达式的末尾必须使用的分号。
假设输入文件Formulas.txt如下所示:
15;
10 + 3 + 0 + 25;
5 + 6-7-8 + 9 + 10-11;
当我们使用该输入运行程序时,输出应评估所有表达式并将其分别打印在自己的行上:
$ ./calc2
15
38
4
我一直坚持为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;
}
答案 0 :(得分:1)
您可以在switch
上添加一个额外的大小写来处理';'
,如果文件包含非法的运算符来捕获简单的错字,则可以添加一个default
大小写。
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;
10 + 3;
作为输入观察会发生什么
cin >> sum;
读取15。
while (cin >> opr >> value)
阅读;进入opr
,将第二个方程式中的10进入value
switch (opr)
运行
case ';'
打印出sum
,将sum
设置为10,然后循环回到
while (cin >> opr >> value)
将+读入opr
,将3读入value
case '+'
运行并将sum
设置为10 + 3,然后循环回到
while (cin >> opr >> value)
其内容为;放入opr
,然后失败,因为没有value
要读取。这将退出而不打印任何内容。
该修补程序为
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;
打印循环退出后剩下的总和。如果这是入门课程,则可以在这里停止。
但是...
您可以通过
之类的输入获得相同的效果15;
10 + 3芝士汉堡
或
15;
10 + 3
以及来自
的类似行为15;
10 + 3 + fnord + 25;
5 + 6-7-8 + 9 + 10-11;
这显然是错误的。在编程的现实世界中,您必须处理违反协议的情况。世界上到处都是程序,它们无法完全抵御不良输入,现在他们的主机正在发送垃圾邮件,甚至更糟。讲师可能会扣一些分数,以奖励涵盖所有基础的学生。
答案 1 :(得分:0)
我认为您无法像您所说的那样做……因为您必须指定输入的结尾。否则,编译器将无法确定输入,并且它将无限期读取。因此,您必须以某种方式指定输入的结束位置。
答案 2 :(得分:0)
解决问题的建议:
#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;
}
编译与执行
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra s.cc
pi@raspberrypi:/tmp $ cat formulas.txt
15;
10 + 3 + 0 + 25;
5 + 6 - 7 - 8 + 9 + 10 - 11;
pi@raspberrypi:/tmp $ ./a.out < formulas.txt
15
38
4
pi@raspberrypi:/tmp $