为什么我不能在第一个代码中输入五个字符到数组中,但是当使用第二个代码中所示的getchar()时呢?

时间:2015-03-23 17:35:09

标签: c arrays scanf getchar

如果我使用第一个代码,我无法将所有5个字符输入数组。但是如果我使用第二个代码就行了。为什么呢?

码:1

#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,n;
char a[5];
for(i=0;i<5;i++)
{
    printf("%d::",i+1);
    scanf("%c",&a[i]); //I can input only 1,3,5 values.
}
printf("Enter:\n");
for(i=0;i<5;i++)
printf("%c",a[i]);
getch();
return 0;
}

码:2

#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,n;
char a[5];
for(i=0;i<5;i++)
{
    printf("%d::",i+1);
    scanf("%c",&a[i]);
    getchar();
}
printf("Enter:\n");
for(i=0;i<5;i++)
printf("%c",a[i]);
getch();
return 0;
}

1 个答案:

答案 0 :(得分:2)

原因是当您输入字符时,按 Enter 键。 scanf将使用该字符,然后将换行符(\n)留在标准输入流(stdin)中。当下次调用带有scanf的{​​{1}}时,它会看到换行符在%c中持续存在并直接使用它,因此不会等待进一步的输入。

在第二个代码中,stdin会消耗每次迭代中前一次调用getchar()时遗留的\n个字符。这就是第二个代码按预期工作的原因。