读取.txt文件中的多行并输出每行的答案

Reading multiple lines in a .txt file and outputting an answer for each line

本文关键字:答案 输出 txt 文件 读取      更新时间:2023-10-16

我编写了一个程序,它接受来自.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 并将其保存为总和,然后你读取 ';' 并分配一个with,然后你读取 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 $