LINUX.ORG.RU

(scanf в С) Объясните, почему это гючит...


0

0

#include

main()
{
int a;
while(1)
{
int a;
printf("Input a number: ");
scanf("%1d", &a);
printf("%d\n", a);
}
}
===================================

При вводе абракадабры (а-ля "432asd") прога, содержащая такой фрагмент, уходит в бесконечный цикл и scanf больше не тормозит цикл на ввод данных.

Объясните суть проблемы. Я никак не могу въехать почему scanf "уходит в себя".

anonymous

> При вводе абракадабры (а-ля "432asd") прога содержащая такой фрагмент
> уходит в бесконечный цикл и scanf больше не тормозит цикл на ввод
> данных. Объясните суть проблемы. Я никак не могу въехать почему scanf
> "уходит в себя".

Согласно стандарту. man scanf:

"Scanning stops when an input character does not match such a format
character."

Таким образом, оно читает 4, 3 и 2, и затыкается на 'a'. Поскольку 'a'
не соответствует строке форматирования, то оно остается не прочитанным,
и scanf обрывается.

Тут надо понимать, что scanf отнюдь не читает данные построчно (в чем
легко убедиться, если натравить fscanf на файл). То, что оно ждет
нажатия Enter при вводе с stdin - это следствие кэширования ввода.

int19h ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.