scanf的这种行为有什么解释?

时间:2013-04-06 15:42:47

标签: c for-loop scanf

我有这段代码:

#include <stdio.h>
int main()
{
    char vc[5]={1,1,1,1,0};
    int vi[4]={0,0,0,0};

    printf("Reading characters...\n");
    for(int i = 0 ; i < 4 ; i++)
        scanf("%c",&vc[i]);

    printf("Reading numbers...\n");
    for(int i = 0 ; i < 4 ; i++)
        scanf("%d",&vi[i]);

    for(int i = 0 ; i < 4 ; i++)
    printf("%c ",vc[i]);

    printf("\n");

    for(int i = 0 ; i < 4 ; i++)
    printf("%d ",vi[i]);

    printf("\n");

    return 0;
}

我只能在打印“阅读数字”之前输入2个字符,然后转到下一个for循环。为什么迭代只持续2步?它应该是4。

1 个答案:

答案 0 :(得分:1)

这是因为%c不会忽略空格而你可能会回击。尝试:

scanf(" %c",&vc[i]);
       ^

空格使scanf忽略任何空格。