0

编译器:GCC Linux 32 位

#include<stdio.h>

int main()
{
    int i;
    char a[5];

    for(i=0;i<5;i++)
        scanf("%c",&a[i]);

    for(i=0;i<5;i++)
        printf("%c",a[i]);
} 

为什么这个数组a只接受三个字符,即使我指定它需要 5 个字符?如果我输入整数,它工作正常。

4

3 回答 3

4

scanf()正在阅读换行符。如果您输入'a', 'b', 和'c', 并Enter在每个之后点击,那么a将包含{'a', '\n', 'b', '\n', 'c'},并且最终'\n'将不会被读取。

于 2013-10-14T15:27:17.243 回答
3

这是因为换行符(\n在 Unix/Linux 上)被留下scanf()用于下一次调用scanf()(在这种情况下)。更改scanf("%c",&a[i]);

scanf(" %c",&a[i]);  
       ↑
   space before specifier  

在 之前放置空格时%c,会scanf()跳过输入中的任意数量的空白字符。

于 2013-10-14T15:25:29.877 回答
0

\n被消耗scanf()这就是为什么剩下的 2 个字符没有被占用的原因。

在前面添加一个前导空格%c

改成:

scanf(" %c", &a[i]);
于 2013-10-14T15:30:40.807 回答