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

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

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

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

01.04.2013, 13:10. Просмотров 1135. Ответов 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 то все ок.
Не соображу почему ...
Может есть более достойный вариант кода для этой цели
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 13:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C++ Цикл не останавливается на cin >> n; (C++):

Останавливается цикл и иногда пропускает второй cin - C++
Проблема в названии темы. Программа должна класть в переменную slovo все буквы из s1, но доходит до первой &quot;не буквы&quot; и цикл...

Почему не останавливается цикл по требованию? - C++
Здравствуйте! Интересует вопрос по теме. for (int i = 2; !flag; ++i) { if (cin.get() == 'q') flag...

Цикл не останавливается на терминальном нуле - C++
#include&lt;iostream&gt; #include&lt;string.h&gt; using namespace std; void strlen(char *s) { int i; do {

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync - C++
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод. Не пойму предназначение cin.get() !=...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear() - C++
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не изучал, поэтому возникали некоторые проблемы....

цикл while(cin) - C++
когда цикл заканчивается, то cin &gt;&gt; j; не работает. почему? int main() { int c; vector&lt;int&gt; num; while(cin&gt;&gt;c)...

9
Savras
-1 / 2 / 1
Регистрация: 03.01.2013
Сообщений: 10
01.04.2013, 14:37 #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;
    }
1
Новичок
Модератор
1238 / 786 / 175
Регистрация: 17.07.2012
Сообщений: 4,224
Записей в блоге: 1
Завершенные тесты: 2
01.04.2013, 14:46 #3
Да уж цикл for для такого применять,выглядит как-то коряво,вот с while норм.

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

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

Добавлено через 1 минуту
Цитата Сообщение от SERUYBKR Посмотреть сообщение
Это из-за ошибки в буфере.
не понял, что делать дальше?
0
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
01.04.2013, 15:33 #6
Цитата Сообщение от Pavel1111 Посмотреть сообщение
не понял, что делать дальше?
C++
1
cin.ignore();
?
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
01.04.2013, 15:36 #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;
}
0
Pavel1111
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
01.04.2013, 16:22  [ТС] #8
Спасибо!!! Работает!! Осознаю!
0
FORWARD^
5 / 5 / 0
Регистрация: 14.01.2011
Сообщений: 20
24.12.2013, 22:51 #9
Точно такая же проблема. Хоть здесь и есть решение, может кто-нибудь объяснить?
Почему cin игнорируется, почему возникает ошибка в буфере? С чем это связано?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.12.2013, 00:26 #10
Цитата Сообщение от FORWARD^ Посмотреть сообщение
Почему cin игнорируется, почему возникает ошибка в буфере? С чем это связано?
Если вводится int, то cin >> ожидает цифры, перед которыми может быть + или -. Если первым символом оказывается буква, то в потоке ввода устанавливается флаг ошибки и поток становится нерабочим. Всё невведённое остаётся в очереди ввода (в буфере). clear() сбрасывает флаг ошибки, поток становится рабочим. sync() очищает буфер ввода (в Linux sync() не работает).
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 00:26
Привет! Вот еще темы с ответами:

Цикл и cin - C++
Здравствуйте. Уже сталкивался с подобной проблемой и никак не могу снова разобраться. При втором проходе цикла в функции add_data()...

Ошибка ( cin.get и цикл ) - C++
Решал задачу, почти заработала но ... Есть 2 кода : 1 - моя задача 2 - сделал для проверки в задачи № 1 (код № 1) чет плохо...

цикл после cin - C++
вешается простая программа. если убрать for - работает если убрать ввод cin - работает вместе не хотят ((( #include &lt;stdio.h&gt; ...

Ввод данных используя цикл while (cin >> ) - C++
Здравствуйте, не могу разобрать, как работает одна из инструкций данной программы. Строка с циклом while ( inFile &gt;&gt; str1 ) В данном...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
25.12.2013, 00:26
Ответ Создать тему
Опции темы

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