c++ - 计算多个算术表达式
问题描述
编写一个更好的计算器版本,calc2.cpp,它可以计算多个算术表达式。让我们使用必须在输入中每个表达式的末尾使用的分号符号。
假设输入文件 formulas.txt 如下所示:
15;
10 + 3 + 0 + 25 ;
5 + 6 - 7 - 8 + 9 + 10 - 11;
当我们使用该输入运行程序时,输出应该评估所有表达式并将它们各自打印在自己的行上:
$ ./calc2 < 公式.txt
15
38
4
我坚持为字符“;”设置一个循环 可以对每一行进行重做计算。请帮忙,谢谢!
#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;
}
解决方案
如果文件包含非法运算符字符以捕获简单的拼写错误,您可以添加一个额外的 case 来switch
处理 the';'
和一个额外的case。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)
上面写着;intoopr
然后失败,因为没有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 + 弗诺德 + 25 ;
5 + 6 - 7 - 8 + 9 + 10 - 11;
这显然是错误的。在现实的编程世界中,您必须处理违反协议的情况。世界上到处都是无法完全保护自己免受不良输入影响的程序,现在它们的主机正在处理垃圾邮件或更糟的情况。教师可能会扣留一些分数来奖励覆盖所有基础的学生。
推荐阅读
- javascript - 如何阻止用户访问给定的 url?
- sql - Biq 查询:查询执行期间超出资源
- aws-amplify - 放大自定义身份验证身份声明上的数据存储“未经授权”错误
- python - 如何在 Python 中的每个 awk 命令之后创建一个新行?
- r - R [DescTools?] 中两个范围的重叠量
- python - 如果满足某些条件,如何从关系数据库返回值;姜戈
- sql - 创建外键时出错(检查数据类型)
在 local_fees 上创建外键时出错(检查数据类型)
I already check my datatypes in both table manage_fees and fees table
已经设置
fees pk
为 unsgined 与manage_fee
我仍然收到有关- r - 创建函数以返回具有最大观察数的变量
- python - 在集合字典中对具有相同值的所有键进行分组
- swift - 从共享 Userdefaults 获取值时崩溃