Не работает второе чтение из 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 шт):
У вас явно нет 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;
}