строка cout << sum << endl;
ставится после для , поэтому вы пишете только одно значение в конце, а не значение каждый раз ';'может достигать
In
if( a== ';')
{
sum+= num;
sum-= num;
}
сумма в неизмененном, за исключением случаев переполнения
должно быть что-то вроде
if( a== ';')
{
cout << sum << endl;
sum = 0;
}
потому что ';'отмечает конец формулы.
Ваш цикл не может управлять такой формой, как 10 + 3 + 0 + 25
, потому что каждый ход для вы всегда управляете оператором, а затем
.ввод 15;10 ...
, и чем нельзя управлять, вы читаете 15 и сохраняете его в sum , затем читаете ';'и назначьте a с, затем вы прочитаете 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 $