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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pavel1111
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
#1

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

01.04.2013, 13:10. Просмотров 997. Ответов 9
Метки нет (Все метки)

Имею код:
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;
Посмотрите здесь:

cin.eof и cin.fail C++
C++ Ошибка ( cin.get и цикл )
C++ цикл while(cin)
C++ использование cin.get вместо 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;
    }
Новичок
Модератор
 Аватар для Новичок
1170 / 741 / 156
Регистрация: 17.07.2012
Сообщений: 4,095
Записей в блоге: 1
Завершенные тесты: 2
01.04.2013, 14:46     C++ Цикл не останавливается на cin >> n; #3
Да уж цикл for для такого применять,выглядит как-то коряво,вот с while норм.

Добавлено через 1 минуту
Pavel1111,причина наверно в том что при вводе переменной когда вводиться буква возвращается переменной код этого символа.
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
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
1425 / 762 / 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
C++ Выяснить почему после ввода первого элемента массива цикл не работает (std::cin в цикле for)
C++ Цикл не останавливается на терминальном нуле
Безконечый цикл при использовании cin и getline() C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5410 / 4806 / 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;
Ответ Создать тему
Опции темы

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