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

Странность в цикле While - C++

Восстановить пароль Регистрация
 
Derpy
 Аватар для Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 02:06     Странность в цикле While #1
В случае возвращения функцией сканф нуля получается бесконечный цикл но выполняется только 2 принтфа (ввода числа больше не появляется). Подскажите пожалуйста в чем ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int ti=0;
float tempd=0;
        while(ti<1)
        {
            printf("Enter deciati4noe 4hislo\n");
            ti=scanf("%f",&tempd);
            if(ti==0)
            {
                printf("Neverni vvod\n");
                //getch();
            }
        };
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 02:06     Странность в цикле While
Посмотрите здесь:

странность массива C++
Небольшая странность в "Hello World!" C++
функция в цикле C++
C++ Странность С++ и SDL
C++ Ошибка в цикле while
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 02:22     Странность в цикле While #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int ti=0;
float tempd=0;
                while(ti<1)
                {
                        printf("Enter deciati4noe 4hislo\n");
                        scanf("%f",&tempd);
                        ti=tempd;
                        if(ti==0)
                        {
                                printf("Neverni vvod\n");
                                //getch();
                        }
                };
Derpy
 Аватар для Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 02:39  [ТС]     Странность в цикле While #3
Цитата Сообщение от 2e1553ce Посмотреть сообщение
ti=tempd;
Если так то ti тут вобще не нужно можно сразу с темпом сравнивать.
И этот вариант приводит к такому же результату
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 02:43     Странность в цикле While #4
Кинь программу полностью.

Добавлено через 1 минуту
Не надо.... После закрывающей скобки цыкла while убери точку с запятой.
Derpy
 Аватар для Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 02:49  [ТС]     Странность в цикле While #5
Цитата Сообщение от darkknight2008 Посмотреть сообщение
После закрывающей скобки цыкла while убери точку с запятой.
Ничего не изменилось
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
25.12.2011, 02:53     Странность в цикле While #6
я чет не пойму где ошибка, все правильно ж работает?: D
Derpy
 Аватар для Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 02:58  [ТС]     Странность в цикле While #7
Цитата Сообщение от 2e1553ce Посмотреть сообщение
я чет не пойму где ошибка, все правильно ж работает?: D
Если ввести число то всё правильно. А если ввести символы уходит в бесконечный цикл. Компилятор Visual Studio 2010

Добавлено через 1 минуту
Причем выполняется не всё тело цикла
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 03:09     Странность в цикле While #8
Я разобрался с твоей проблемой. Дело в том что когда ты вводишь вместо числа строку например 'abc' ты подтверждаешь ввод нажатием Enter. scanf берет символы abc пытается преобразовать в число, у него не получается. Но дело в том, что scanf взял abc но enter(символ '\n') остался в буфере ввода, и когда цикл идет на следующий шаг, то scanf находит в буфере нажатие Enter и считает что ввод закончен и пытается пустую строку преобразовать в число и так до бесконечности, потому что нажатие Enter не исчезло. Чтобы его отловить достаточно после вызова scanf вызвать например функцию getchar().
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
25.12.2011, 03:21     Странность в цикле While #9
scanf() возвращает число присвоенных элементов ввода или EOF
Derpy
 Аватар для Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 03:48  [ТС]     Странность в цикле While #10
Цитата Сообщение от insolent Посмотреть сообщение
scanf() возвращает число присвоенных элементов ввода или EOF
По стандарту да но ti==EOF не работает. Потому что EOF преобразовывается в -1 а в данном случае возвращается 0.

Добавлено через 3 минуты
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Чтобы его отловить достаточно после вызова scanf вызвать например функцию getchar().
Очень странно но получается ручная промотка бесконечного цикла. Тоже без нового ввода.
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 11:23     Странность в цикле While #11
Перепроверил все и вижу накладку. как я понял, если scanf не смог опознать ввод(Например введено abc вместо числа), то он буфер ввода не очиищает, т.е. в буфере ввода остается abc и происходит зацикливание. Чтобы решить проблему, нужно в случае неправильного ввода(ti == 0) очистить буфер ввода. Это можно сделать при помощи вызова fflush(stdin);
П.С.: scanf возвращает EOF когда поле формата NULL, так что проверять это не нужно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 13:23     Странность в цикле While
Еще ссылки по теме:

Ошибка в цикле C++
C++ Переменная в цикле for
C++ Странность определения размера памяти структуры

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

Или воспользуйтесь поиском по форуму:
Derpy
 Аватар для Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 13:23  [ТС]     Странность в цикле While #12
Цитата Сообщение от darkknight2008 Посмотреть сообщение
Это можно сделать при помощи вызова fflush(stdin);
Вот это помогло спасибо
Yandex
Объявления
25.12.2011, 13:23     Странность в цикле While
Ответ Создать тему
Опции темы

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