io — C ++ Чтение из текстового файла и вычисление суммы для каждой строки:

Я должен написать программу на C ++, которая будет читать из текстового файла и вычислять общее количество для каждой строки. Текстовый файл выглядит так

2
14.4 56.9 54 65.7 86.9
98.6 84.9 34.7 85.5 15.4
24.4 57.9 54.9 70.7 63.5

34.4 16.9 41.9 54.7 84.98
97.6 84.9 14.7 85.5 16.4
23.4 76.9 54.9 74.7 64.5

Первая строка содержит количество недель. Строки, которые следуют, имеют пять двойных каждая (3 строки в неделю). И он будет повторять количество недель, указанное в первой строке. Пока у меня есть этот код для расчета суммы за каждую неделю. Так что это дает мне 0 как общее количество перед каждой неделей

string s;
double sum[4];

for(int j = 0; j < weeks; j++)
{
for(int i = 0; i <= 3 && getline(in, s); i++)
{
istringstream sin(s);
sum[i] = 0;
while (sin>>sales)
{
sum[i] = sum[i] + sales;
}
cout << sum[i] << endl;
}
}

И вот результат:

0
277.9
319.1
271.4
0
232.88
299.1
294.4

Может кто-нибудь сказать мне, почему я получаю этот 0? Также, как я должен хранить числа как общее для каждой строки. Количество строк будет варьироваться в зависимости от количества недель. Кто-нибудь, помогите, пожалуйста!

1

Решение

Вы суммируете числа для пустых строк между каждой группой. Поскольку в этих строках нет чисел, сумма, конечно, остается на нуле. Я также предполагаю, что вы не читаете всю первую строку, чтобы узнать количество недель, поэтому там также есть ведущий ноль. Чтобы решить проблему, просто прочитайте дополнительную строку перед началом каждой недели, например так:

string s;
double sum[4];

for(int j = 0; j < weeks; j++)
{
getline(in, s);
for(int i = 0; i < 3 && getline(in, s); i++)
{
istringstream sin(s);
sum[i] = 0;
while (sin>>sales)
{
sum[i] = sum[i] + sales;
}
cout << sum[i] << endl;
}
cout << endl;
}

Выход:

277.9
319.1
271.4

232.88
299.1
294.4
2

Другие решения

Убедитесь, что это не пустая строка, например:

 if (!s.empty())
{
cout << sum[i] << endl;
}
1

Я думаю, что проблема в том, что количество недель было прочитано с помощью оператора >>. После этого следующий вызов getline читает пустую строку. Было бы объяснение первого нуля. Также я вижу, что между двумя триадами линий есть пустая строка. Так что, кажется, вы снова прочитали пустую строку.
Помимо этого я не понимаю, почему вы используете цикл

for(int i = 0; i <= 3 && getline(in, s); i++)

если есть только три строки на неделю.

Поэтому вам нужно проверить, была ли прочитана пустая строка.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector