Как scanf знает, когда заканчивать цикл for? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующий код:

#include <stdio.h>

int main(int argc, char **argv) {
   int arr[2];
   arr[0] = 0;
   arr[1] = 0;
   int end = 0;
   int i;   
   for (i=0; i<2 ; i++){
      scanf(" num %d", &arr[i]);
   }

  scanf(" end %d", &end);
  printf("arr0 %d \n", arr[0]);
  printf("arr1 %d \n", arr[1]);
  printf("end  %d \n", end);

}

Для ввода:

num 1
num 2
end 3

Работает отлично. Но это также работает для следующего ввода:

num 1
end 2

Откуда он знает, что нужно завершить цикл for и оценить последнее сканирование? Почему не терпит неудачу?

1 Ответ

0 голосов
/ 27 апреля 2018

scanf Сбой во втором примере. Вторая итерация цикла завершается неудачно и возвращает 0 прочитанных элементов, оставляя arr[1] без изменений. Затем цикл заканчивается, и последний scanf успешно читает вторую строку ввода.

...