为什么scanf被执行11次?

时间:2018-10-30 11:28:38

标签: c scanf

#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 :(得分:-2)

在这种情况下,%d之后的空格是格式说明符,因此它将2个参数以空格作为分隔符。

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