Форум программистов, компьютерный форум, киберфорум
Наши страницы

Ошибка при повторном получении данных из потока cin - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отключение usb портов по отдельности http://www.cyberforum.ru/cpp-beginners/thread642821.html
Вот такая тема: начальство выиграло тендер на поставку компов, компы собрались, доставили, а при сдаче вот такая беда... По условиям договора, в компах должна быть возможность отключения по...
C++ Рекурсия: нахождение чисел Фибоначчи (нужны комментарии) это функция нахождения чисел фибоначи. немогу понять как она работает можите написат как это происходит в программе. отладка много не сказала. int ret(int n) { if(n == 0 || n == 1) return n;... http://www.cyberforum.ru/cpp-beginners/thread642796.html
Что то типа goto C++
Мне нужно что нибудь похожее на goto... Только мне нужно перескочить из функции в одном файле в функцию другого файла
C++ Описать класс "Массив"
Язык С++ 1.Описать класс "Массив". Методы массива: конструктор с одним параметром - длина массива; ввод и вывод элементов массива; проверка, является ли массив упорядоченным по убыванию;...
C++ Сортировка вставками http://www.cyberforum.ru/cpp-beginners/thread642710.html
Где-то ошибка в цикле... помогите) ... int array = {3, 2, 1}, min = 0, a = 0, b = 0; ... for(a = 1; a < size; ++a); {
C++ Ошибка. Переопределение параметров в функции Добрый вечер всем! Такая задача: Необходимо составить программу для систем счисления (от 2 до 36) пользователь вводит число в десятичной системе и вводит номер системы. например: число 350 в... подробнее

Показать сообщение отдельно
Gibboustooth
733 / 201 / 11
Регистрация: 23.06.2011
Сообщений: 440

Ошибка при повторном получении данных из потока cin - C++

27.08.2012, 12:03. Просмотров 1065. Ответов 15
Метки (Все метки)

Добрый день, уважаемые форумчане.

Делал учебную задачу и столкнулся с проблемой, которую затрудняюсь сам решить.

Задача формулируется следующим образом:
Напишите программу, считывающую ряд чисели записывающую их в ряд vector<int>. После того, как пользователь введет все числа, он может попытаться определить, сколько числе он ввел, чтобы найти их сумму.
Обработайте все входные данные. Например, убедитесь, что программа выдает сообщение об ошибке, если пользователь просит просуммировать больше чисел, чем хранится в векторе.
Я написал такое решение:

Решение
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "Lib.h"
#include <conio.h>
 
void err(string s) //Catch errors
{
    throw runtime_error(s);
}
vector<int> input()
//Get from cin into vector integer numbers
{
    vector<int> v;
    int temp;
    cout<<"Please, enter row of integers, separated with space. To exit press <|>\n";
 
    while(cin>>temp) 
        v.push_back(temp);
    return v;
}
int get_sum(vector<int> values, int num)
//Count sum of <num> first elements from vector
{
    if (num>values.size())
        err("Vector size exceeded!\n"); 
    else if(num<=0)
        err("Wrong number of elements!\n"); 
    else { 
        int sum=0;
        for(unsigned int i=0;i<num;++i)
            sum+=values[i];
        return sum;
    }
}
int main() 
{
    //Loop while user wants to continue
    do
    {
        //get vector in input values
        vector<int> v=input();
        cout<<"Please, enter number of values to sum (from the first):\n";
        //get number of values 
        int num_sum=0;
        /*ERROR here. Seems like <cin> still contains something, 
        previous function didn't get, so it doesn't let new input*/
        cin>>num_sum;
        try {
            int sum=get_sum(v,num_sum);
            cout<<"Sum of "<<num_sum<<" elements is: "<<sum;
        }
        catch (runtime_error& e) {
            cerr<<"error: "<<e.what()<<endl;
        }
        catch(...) {
            cerr<<"Oups, unknown exception!\n";
        }
        //Prompt to continue
        cout<<"Press Y - for new input\n";
    }
    while(toupper(getch()) == 'Y');
    system("pause");
    return 0;
}


Но строчка функции main() "cin>>num_sum;" отрабатывает не так, как мне бы хотелось - судя по всему , в потоке cin остаются необработанные символы, так что у пользователя не запрашивается новый ввод и в переменную num_sum передается ерунда.

Подскажите, пожалуйста, как можно от этого избавиться?

P.S. Если необходимо содержимое "Lib.h", могу его скинуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru