Почему сканирование выполняется 11 раз? - PullRequest
0 голосов
/ 30 октября 2018
#include <stdio.h>

int main(void) 
{
    int marks[10];
    int i;

    for (i=0; i < 10; i++)
    {
        scanf("%d ", &marks[i]);
    }

    printf("\n");

    for (i=0; i <= 9; i++)
    {
        printf("%d\n", marks[i]);
    }

    return 0;
}

C Language Array Ясно, что первое условие цикла должно выполняться только 10 раз, но вместо этого оно запрашивает 11-е значение. Кто-нибудь знает об этом? Или это просто одна из многих странных форм поведения C?

Во втором цикле все работает так, как я хочу!

1 Ответ

0 голосов
/ 30 октября 2018

В этом случае пробел после% d является спецификатором формата, поэтому он принимает 2 аргумента с пробелом в качестве разделителя.

scanf("%d %d", &marks[i], &marks[i+1]); => 1 2
scanf("%d ", &marks[i]); => 1 2
scanf("%d", &marks[i]);  => 1
...