dev C ++ Чтение фиксированного числа строк целых чисел с неизвестным числом целых чисел в каждой строке

Я пытаюсь прочитать данные и решить простую проблему, данные:

3               - number of lines to read in
1 1
2 2 2
3 4

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

3
1 1
Sum: 2
2 2 2
Sum: 6
3 4
Sum: 7

Но из моего алгоритма я получил вывод:

3
1 1
Sum: 1
2 2 2
Sum: 4
3 4
Sum: 3

Я написал код, но он не работает должным образом (как указано выше):
ИЗДАНИЕ
Я улучшил свой код и знаю, что он работает правильно без строк и т. Д., Правильный код приведен ниже:

#include<iostream>
using namespace std;
int main()
{
int x;
int t, sum;
cin >> t;

for(int i=0; i<t; i++) {
sum=0;
while(true)
{
cin >> x;
sum = sum + x;
if(cin.peek()=='\n')
break; //conditional break
}
cout << "Sum: " << sum << "\n";
}
return(0);
}

2

Решение

Читать строку за раз, используя getlineв объект типа std::string, Тогда используйте это std::string объект для инициализации объекта типа std::istringstreamи использовать экстрактор, чтобы прочитать int значения из объекта потока до тех пор, пока не произойдет сбой. Затем вернитесь и прочитайте следующую строку. Грубо говоря:

std::string line;
while (std::getline(std::cin, line)) {
std::istringstream in(line);
int sum = 0;
int value = 0;
while (in >> value)
sum += value;
std::cout << sum << '\n';
}
5

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

C ++ дает вам много инструментов:

  • string это класс, управляющий временем жизни символьных строк.
  • getline помещает строку из потока (до следующей новой строки) в string,
  • istringstream делает istream из string
  • istream_iterator перебирает istream, извлекая данный тип, ломаясь на пробел.
  • accumulate берет итераторы, разграничивающие диапазон, и суммирует значения:

Итого:

string line;
while (getline(cin, line)) {
istringstream in(line);
istream_iterator<int> begin(in), end;
int sum = accumulate(begin, end, 0);
cout << sum << '\n';
}
1

Положил

sum=0; // на вершине

п.с.

while(cin.peek()!='\n'){}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector