Я пытаюсь прочитать данные и решить простую проблему, данные:
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);
}
Читать строку за раз, используя 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';
}
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';
}
Положил
sum=0;
// на вершине
п.с.
while(cin.peek()!='\n'){}