Не работает второе чтение из cin

Изучаю c++ по книге Бьёрна Страуструпа, задание следующее: Напишите программу. считывающую и сохраняюшую ряд целочис ленных значений, а затем вычисляющую сумму первых N чисел. За просите значение N. считайте значения в vector и вычислите сумму первых N значений. Практикуюсь на android, через приложение Dcoder, во время выполнения, программа завершается на 38 строке, и не выполняет второй ввод числа, подскажите пожалуйста, в чем проблема

Вот мой код:


#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string> using namespace std;

//Compiler version g++ 6.3.0 
double  sum_of_nums ( vector <double> a, int b)
{
// this function calculate number of numbers,    
// and check input data
    double sum=0;
    for ( int i =0; i<b; ++i) {
        if (a.size()<b)
            cerr << "Number which you entered higher then quantity of eneterd numbers. /n";
        else if (b!=0)
            sum=sum+a[i];
    }
    return sum;
}

int main()
{
vector<double> nums;
double num=0;   
int qnt;   
double calc=0;   
    cout << "Please enter any numbers:\n";
    while (cin >> num)
        nums.push_back(num);   
    cout <<"You entered:\n"; 
    for (int i=0; i<nums.size();++i)
        cout << nums[i] << "\n";    
    cout << "Enter number of numbers you want to calculate:\n ";   
    while (cin >> qnt){
        calc=sum_of_nums(nums, qnt);
        cout << "Sum of nubers " << calc;    
    } 
}

Ответы (1 шт):

Автор решения: Harry

У вас явно нет 38 строк в приведенном коде :)

Но смотрим отформатированный ваш код...

В первой части вы читаете числа до... до морковкина заговенья, словом, до бесконечности. Или пока не введете что-то, что переведет поток cin в состояние полной неработоспособности. Например, слово нехорошее какое из трех неизвестных...

cout << "Please enter any numbers:\n";
while (cin >> num)
{
    nums.push_back(num);
}

Потом вы выводите список введенного:

cout << "You entered:\n";
for (int i = 0; i < nums.size(); ++i)
{
    cout << nums[i] << "\n";
}
cout << "Enter number of numbers you want to calculate:\n ";

А затем пытаетесь опять читать. Из сломанного потока. Который ни одного чтения выполнить не в состоянии. Нельзя напиться из кружки без дна.

Сначала надо кружку запаять (сбросить состояние fail)

cin.clear()

и выбросить из кружки всю грязь (очистить буфер ввода):

cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

И только после этого начинать чтение!

while (cin >> qnt)
{
    calc = sum_of_nums(nums, qnt);
    cout << "Sum of nubers " << calc;
}
→ Ссылка