我编写了一个程序,接受来自.txt
文件的输入并输出总和。我已经在一行中正确得到了数字的总和。我需要文件中所有行的输出。
对此的要求是在.txt
文件中包含一个分号以指示行尾。
#include <iostream>
#include <string>
#include<fstream>
using namespace std;
int main()
{
std::ifstream ifs{"formula.txt"};
int sum = 0;
ifs >> sum;
//int input = 0;
{
for (char a; ifs >> a;)
{
int num;
ifs >> num;
if(a == '+')
{
sum += num;
}
if(a == '-')
{
sum -= num;
}
if( a== ';')
{
sum += num;
sum -= num;
}
}
cout << sum << endl;
}
}
行cout << sum << endl;
放在for之后,所以你最后只写一个值,而不是每次';'到达
在
if( a== ';')
{
sum+= num;
sum-= num;
}
总和没有变化,除非溢出
必须是这样的
if( a== ';')
{
cout << sum << endl;
sum = 0;
}
因为';'标志着公式的结束。
你的循环无法管理像10 + 3 + 0 + 25
这样的形式,因为每次转弯都会为你提供一个操作员然后管理一个数字
输入是15;10 ...
而不是无法管理,你读15并保存总和,然后你读';'并指定一个,然后你读10并指定num,所以10丢失等
一份提案 :
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream ifs("formula.txt");
if (!ifs.is_open()) {
cout << "cannot open formula.txt" << endl;
return -1;
}
int val;
while (ifs >> val)
{
char op;
while (ifs >> op)
{
if (op == ';')
{
cout << val << endl;
break;
}
int num;
if (! (ifs >> num)) {
cout << "unexpected EOF" << 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 formula.txt
15;10+3+0+25;5+6-7-8+9+10-11;
pi@raspberrypi:/tmp $ ./a.out
15
38
4
pi@raspberrypi:/tmp $