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

Cin зацикливание - C++

Восстановить пароль Регистрация
 
scrat2013
 Аватар для scrat2013
2 / 2 / 1
Регистрация: 17.10.2013
Сообщений: 33
22.12.2013, 17:31     Cin зацикливание #1
Здравствуйте, столкнулся с такой проблемой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int a;
    bool b = true;
    while(b)
    {
        cout << "\nEnter value" << endl;
        cin >> a;
        if(a > 0)
            b = false;
        else
            cout << "\nerror";
    }
    return 0;
Если ввести ноль, то повторяем ввод, но если ввести какой нибудь символ, то программа бесконечно выводит "Enter value", хотя значение a при этом 0. В чем может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 17:31     Cin зацикливание
Посмотрите здесь:

C++ Объект cin и его метод cin.get()
cin.eof и cin.fail C++
зацикливание в C++ C++
C++ использование cin.get вместо cin
зацикливание C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
George_Amberson
9 / 9 / 10
Регистрация: 13.11.2013
Сообщений: 35
22.12.2013, 17:35     Cin зацикливание #2
Цитата Сообщение от scrat2013 Посмотреть сообщение
Если ввести ноль, то повторяем ввод, но если ввести какой нибудь символ, то программа бесконечно выводит "Enter value", хотя значение a при этом 0. В чем может быть проблема?
Программа должна считывать целочисленную переменную
Цитата Сообщение от scrat2013 Посмотреть сообщение
int a;
, а вы вводите символ.Для этого измените
Цитата Сообщение от scrat2013 Посмотреть сообщение
int a;
на
C++
1
char a;
scrat2013
 Аватар для scrat2013
2 / 2 / 1
Регистрация: 17.10.2013
Сообщений: 33
22.12.2013, 17:40  [ТС]     Cin зацикливание #3
А как мне проверять введена цифра или символ? Мне нужно это для того, чтобы когда пользователь неправильно вводит число в двоичной системе счисления повторить ввод, с числами отличными от 0 или 1 все понятно, но как определить, что был введен еще и символ и повторить ввод? Заранее благодарен.
George_Amberson
9 / 9 / 10
Регистрация: 13.11.2013
Сообщений: 35
22.12.2013, 17:49     Cin зацикливание #4
Цитата Сообщение от scrat2013 Посмотреть сообщение
А как мне проверять введена цифра или символ? Мне нужно это для того, чтобы когда пользователь неправильно вводит число в двоичной системе счисления повторить ввод, с числами отличными от 0 или 1 все понятно, но как определить, что был введен еще и символ и повторить ввод? Заранее благодарен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char buff[20];
    int a;
    bool b = true;
    while(b)
    {
        cout << "\nEnter value" << endl;
        cin >> buff;
        a = atoi(buff);
        if(a > 0)
            b = false;
        else
            cout << "\nerror";
    }
    return 0;
Не совсем корректный, но в целом рабочий способ
scrat2013
 Аватар для scrat2013
2 / 2 / 1
Регистрация: 17.10.2013
Сообщений: 33
22.12.2013, 17:55  [ТС]     Cin зацикливание #5
Большое спасибо! А как будет выглядеть корректный способ?
George_Amberson
9 / 9 / 10
Регистрация: 13.11.2013
Сообщений: 35
22.12.2013, 18:07     Cin зацикливание #6
Цитата Сообщение от scrat2013 Посмотреть сообщение
Большое спасибо! А как будет выглядеть корректный способ?
Оставляю это вам на размышление
Я описал способ, который знаю, для ваших целей он полностью корректен
Yandex
Объявления
22.12.2013, 18:07     Cin зацикливание
Ответ Создать тему
Опции темы

Текущее время: 02:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru