Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отключение usb портов по отдельности http://www.cyberforum.ru/cpp-beginners/thread642821.html
Вот такая тема: начальство выиграло тендер на поставку компов, компы собрались, доставили, а при сдаче вот такая беда... По условиям договора, в компах должна быть возможность отключения по отдельности каждого usb порта, т.е. к примеру: на материнской плате есть 4 порта, нужно сделать так, чтобы, например, не работал 1 и 4 порт или все кроме 2 порта.... Мне начальство поставило задачу,...
C++ Рекурсия: нахождение чисел Фибоначчи (нужны комментарии) это функция нахождения чисел фибоначи. немогу понять как она работает можите написат как это происходит в программе. отладка много не сказала. int ret(int n) { if(n == 0 || n == 1) return n; return ret(n-1) + ret(n-2); } http://www.cyberforum.ru/cpp-beginners/thread642796.html
Что то типа goto C++
Мне нужно что нибудь похожее на goto... Только мне нужно перескочить из функции в одном файле в функцию другого файла
C++ Описать класс "Массив"
Язык С++ 1.Описать класс "Массив". Методы массива: конструктор с одним параметром - длина массива; ввод и вывод элементов массива; проверка, является ли массив упорядоченным по убыванию; проверка, является ли массив упорядоченным по возрастанию; включение произвольного элемента в массив с сохранением упорядоченности. 2.Объявить массив, ввести значения, проиллюстрировать...
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 в 8-ричной системе. Программу надо написать через функцию. Сначала я написал через обычную пустую функцию (одним куском кода)-ВСЁ ОТЛИЧНО РАБОТАЕТ. Необходимо написать так что бы сначала шол код... подробнее

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

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

27.08.2012, 12:03. Просмотров 1042. Ответов 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", могу его скинуть.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru