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

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

Войти
Регистрация
Восстановить пароль
 
Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
#1

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

25.12.2011, 02:06. Просмотров 819. Ответов 11
Метки нет (Все метки)

В случае возвращения функцией сканф нуля получается бесконечный цикл но выполняется только 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++
вот программа для замены символов все работает правильно, но только если я ввожу одно число, а если я ввожу два числа через пробел то под...

Странность с динамическим массивом - C++
Меня в тупик поставило следующая ошибка (&quot;Название исполняемого файла&quot; has triggered a breakpoint.) В данном простеньком коде. Кто...

Странность определения размера памяти структуры - C++
Здравствуйте. Никогда с таким не сталкивался, а сейчас просто крышу снесло пока нашёл ошибку там, где не ожидал... struct STRUCT{INT32...

Небольшая странность в "Hello World!" - C++
Начал изучать C++ по учебнику &quot;Джесс Либерти - Освой самостоятельно С++ за 21 день&quot; И сразу же столкнулся с проблемой: в книге имеется...

Ошибка в цикле - C++
Задание: Написать цикл программы. от К=1 до К=10 #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main () ...

затруднение в цикле - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
25.12.2011, 02:39  [ТС]     Странность в цикле While #3
Цитата Сообщение от 2e1553ce Посмотреть сообщение
ti=tempd;
Если так то ti тут вобще не нужно можно сразу с темпом сравнивать.
И этот вариант приводит к такому же результату
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 02:43     Странность в цикле While #4
Кинь программу полностью.

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

Добавлено через 1 минуту
Причем выполняется не всё тело цикла
darkknight2008
62 / 62 / 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
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
25.12.2011, 03:21     Странность в цикле While #9
scanf() возвращает число присвоенных элементов ввода или EOF
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
62 / 62 / 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
Еще ссылки по теме:

Scanf в цикле - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; int main() { int n,i,k; double a,r;

Ошибка в цикле - C++
(Задание - см. вложение) Почему функция fill_array() возвращает неправильные значения? Когда ввожу 1 или 2 числа, выводит цифру 1;...

Ошибка в цикле - C++
Хочу создать массив из 10 чисел. void main() { char a,i; for (i=0; i&lt;10; i++) { printf (&quot;Enter...

Цикл в цикле - C++
Написать программу, в которой пользователь вводит по строкам с клавиатуры элементы двумерного массива (пока пользователь не остановит...


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

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

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