Возврат EOF из SCANF - PullRequest
       61

Возврат EOF из SCANF

0 голосов
/ 27 октября 2019

Я до сих пор не понимаю, как scanf вернуть EOF значение. Программа работает в окне.

Из описания scanf:

"Функция scanf возвращает значение макроса EOF, если перед первым преобразованием произошел сбой ввода (еслиany) завершена. В противном случае функция scanf возвращает количество назначенных элементов ввода, которое может быть меньше предусмотренного или даже равно нулю в случае неудачного раннего сопоставления. "

codeis

int main()
{
int status,a1,a2,b1;
char str1[100];

b1=EOF;
printf("b1=%d\n",b1);
printf("Enter input\n");
status=scanf("%d%d",&a1,&a2);
printf("status=%d",status);

return 0;
}

вход case1:

hello

выход

status=0

вход case2:

^z  (press CTRL-Z) 

выход

staus=-1

В случае 1 - входной сбой перед первым преобразованием? если перед первым преобразованием произошел сбой ввода, почему scanf возвращает 0.

В случае 2 я нажимаю CTRL-Z для первого ввода, а scanf возвращает -1, поэтому единственный способ вернуть Scanf EOF - это нажать CTRL-Z? Если нет, объясните мне пример кода

1 Ответ

0 голосов
/ 27 октября 2019

scanf логика довольно проста. Он возвращает:

  • EOF, если ни один символ не может быть прочитан из потока вообще.
  • EOF, если только начальные пробельные символы до ошибки или конца-of-file может быть прочитан для преобразований , отличных от %c, %s или наборов сканирования (поскольку начальный пробел не является частью преобразования для этих .
  • 0 если первый прочитанный символ не соответствует сканированному набору или первый символ после пробела не соответствует формату скалярных преобразований.
  • в противном случае возвращается не менее 1.
...