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

C++ Цикл не останавливается на cin >> n; - C++

Восстановить пароль Регистрация
 
Pavel1111
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
01.04.2013, 13:10     C++ Цикл не останавливается на cin >> n; #1
Имею код:
C++
1
2
3
4
5
6
7
8
9
.......
int n;
    cout << "Enter the quantity of clients (up to 10)" << endl;
    cin >> n;
    for ( ; n < 1 || n > 10; ) {
        cout << "Try again (up to 10)" << endl;
        cin >> n;
    }
.......
При вводе буквы (например ф) цикл не останавливается на cin >> n ,а печатает
Try again (up to 10)
Try again (up to 10)
Try again (up to 10)
.....
хотя если ввести например22 то все ок.
Не соображу почему ...
Может есть более достойный вариант кода для этой цели
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 13:10     C++ Цикл не останавливается на cin >> n;
Посмотрите здесь:

C++ Ошибка ( cin.get и цикл )
C++ цикл while(cin)
Почему не останавливается цикл по требованию? C++
цикл после cin C++
Цикл и cin C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Savras
-1 / 2 / 1
Регистрация: 03.01.2013
Сообщений: 10
01.04.2013, 14:37     C++ Цикл не останавливается на cin >> n; #2
Такой вариант не подойдет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int n;
    do
    {
        cout << "Enter the quantity of clients (up to 10)" << endl;
        cin >> n;
    }
    while(n < 10);
    {
        cout << endl << "Try again (up to 10)" << endl;
        cout << "Enter the quantity of clients (up to 10)" << endl;
        cin >> n;
    }
Новичок
Модератор
 Аватар для Новичок
1137 / 708 / 148
Регистрация: 17.07.2012
Сообщений: 4,039
Записей в блоге: 1
Завершенные тесты: 2
01.04.2013, 14:46     C++ Цикл не останавливается на cin >> n; #3
Да уж цикл for для такого применять,выглядит как-то коряво,вот с while норм.

Добавлено через 1 минуту
Pavel1111,причина наверно в том что при вводе переменной когда вводиться буква возвращается переменной код этого символа.
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 433
01.04.2013, 15:13     C++ Цикл не останавливается на cin >> n; #4
Это из-за ошибки в буфере.
Pavel1111
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
01.04.2013, 15:16  [ТС]     C++ Цикл не останавливается на cin >> n; #5
Цитата Сообщение от Новичок Посмотреть сообщение
Да уж цикл for для такого применять,выглядит как-то коряво,вот с while норм.

Добавлено через 1 минуту
Pavel1111,причина наверно в том что при вводе переменной когда вводиться буква возвращается переменной код этого символа.
Правда результат одинаков. Не работает к сожалению... точнее работает так же как и с for, на n=e бесконечный цикл получаем.
А если в фор вставляем код знака(буквы), то все равно же должны притормозить на cin, разве нет?

Добавлено через 1 минуту
Цитата Сообщение от SERUYBKR Посмотреть сообщение
Это из-за ошибки в буфере.
не понял, что делать дальше?
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
01.04.2013, 15:33     C++ Цикл не останавливается на cin >> n; #6
Цитата Сообщение от Pavel1111 Посмотреть сообщение
не понял, что делать дальше?
C++
1
cin.ignore();
?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
01.04.2013, 15:36     C++ Цикл не останавливается на cin >> n; #7
Можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() 
{
    std::cout<<"Enter n(1<n<10): ";
    int n;
    for (std::cin>>n; n<1 || n>10; std::cin>>n)
    {
        if (!std::cin)
        {
            std::cin.clear();
            std::cin.sync();
        }
        std::cout << "Try again " << std::endl;
    }
    std::cout<<"n= "<<n<<"\n";
    
    return 0;
}
Pavel1111
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
01.04.2013, 16:22  [ТС]     C++ Цикл не останавливается на cin >> n; #8
Спасибо!!! Работает!! Осознаю!
FORWARD^
 Аватар для FORWARD^
5 / 5 / 0
Регистрация: 14.01.2011
Сообщений: 20
24.12.2013, 22:51     C++ Цикл не останавливается на cin >> n; #9
Точно такая же проблема. Хоть здесь и есть решение, может кто-нибудь объяснить?
Почему cin игнорируется, почему возникает ошибка в буфере? С чем это связано?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 00:26     C++ Цикл не останавливается на cin >> n;
Еще ссылки по теме:

Что делает цикл "while(cin.getline(buf,l_buf))" ? C++
C++ Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
C++ Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.12.2013, 00:26     C++ Цикл не останавливается на cin >> n; #10
Цитата Сообщение от FORWARD^ Посмотреть сообщение
Почему cin игнорируется, почему возникает ошибка в буфере? С чем это связано?
Если вводится int, то cin >> ожидает цифры, перед которыми может быть + или -. Если первым символом оказывается буква, то в потоке ввода устанавливается флаг ошибки и поток становится нерабочим. Всё невведённое остаётся в очереди ввода (в буфере). clear() сбрасывает флаг ошибки, поток становится рабочим. sync() очищает буфер ввода (в Linux sync() не работает).
Yandex
Объявления
25.12.2013, 00:26     C++ Цикл не останавливается на cin >> n;
Ответ Создать тему
Опции темы

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