![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.04.2010
Сообщений: 18
|
![]()
Здравствуйте.
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; } |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 15.04.2010
Сообщений: 18
|
![]()
Уважаемый Alex11223!
Благодарю за помощь. Т.е. при некорректном завершении функции scanf портится поток ввода и в следующем запросе scanf не отрабатывает? Можно ли очистить поток средствами С (т.е. не используя функции C++)? Или это в С нерешаемо? Тогда как в С решается задача обеспечения корректности вводимых данных? |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Он не портится, просто в нем остается та буква (если пытались прочитать число).
Так оба варианта выше вроде и используют только то, что есть в С.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 20.03.2016 в 20:02. |
![]() |
![]() |
![]() |
#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 |