|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.03.2016, 23:21 | #1 |
Пользователь
Регистрация: 15.04.2010
Сообщений: 18
|
Не выполняется scanf
Здравствуйте.
MS VC2005, WinXP В приведенном коде при вводе на первый запрос нечислового значения, например буквы, не выполняется последующий запрос scanf ввода значения BBB. В чем проблема? Заранее благодарю за ответ! #include <stdio.h> #include <locale.h> #include <stdlib.h> #include <conio.h> unsigned short AAA, BBB; int c;//промежут. переменная для ввода значений void main() { setlocale(LC_CTYPE, "rus"); printf_s("Введите AAA в диапазоне 0-7\n"); scanf_s("%u", &c); while (c>7 || c<0) {printf_s("Введенное значение AAA не в диапазоне 0-7\n"); scanf_s("%u", &c);} AAA=c; printf_s("Введите BBB в диапазоне 0-7\n"); scanf_s("%u", &c); while (c>7 || c<0) {printf_s("Введенное значение BBB не в диапазоне 0-7\n"); scanf_s("%u", &c);} BBB=c; } |
19.03.2016, 23:54 | #2 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
если не число ввести, то в c ничего не будет присвоено и останется предыдущее значение (скорее всего 0 в данном случае, ибо глобальная переменная).
Чтобы узнать об ошибке ввода можно прочитать документацию по scanf и проверять возвращаемое значение. http://www.cplusplus.com/reference/cstdio/scanf/ Только тогда вам для повтора ввода наверно надо stdin очистить, иначе оно так и будет пытаться букву прочитать. Например что-то типа Код:
Код:
Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 19.03.2016 в 23:56. |
|
20.03.2016, 19:50 | #3 |
Пользователь
Регистрация: 15.04.2010
Сообщений: 18
|
Уважаемый Alex11223!
Благодарю за помощь. Т.е. при некорректном завершении функции scanf портится поток ввода и в следующем запросе scanf не отрабатывает? Можно ли очистить поток средствами С (т.е. не используя функции C++)? Или это в С нерешаемо? Тогда как в С решается задача обеспечения корректности вводимых данных? |
20.03.2016, 19:58 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Он не портится, просто в нем остается та буква (если пытались прочитать число).
Так оба варианта выше вроде и используют только то, что есть в С.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 20.03.2016 в 20:02. |
21.03.2016, 10:26 | #5 |
Пользователь
Регистрация: 15.04.2010
Сообщений: 18
|
Благодарю за помощь!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
%ls и %lc в printf и scanf | Krasiosoft | Помощь студентам | 2 | 08.07.2015 22:30 |
scanf | cocacola | Общие вопросы C/C++ | 1 | 10.07.2014 05:09 |
scanf | zla9_kolu4ka | Общие вопросы C/C++ | 2 | 26.03.2014 21:48 |
scanf | intmain | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 25 | 20.02.2013 17:53 |
scanf и матрица | Berlioz | Общие вопросы C/C++ | 4 | 24.09.2012 15:12 |