编译器: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 个字符?如果我输入整数,它工作正常。
scanf()
正在阅读换行符。如果您输入'a'
, 'b'
, 和'c'
, 并Enter在每个之后点击,那么a
将包含{'a', '\n', 'b', '\n', 'c'}
,并且最终'\n'
将不会被读取。
这是因为换行符(\n
在 Unix/Linux 上)被留下scanf()
用于下一次调用scanf()
(在这种情况下)。更改scanf("%c",&a[i]);
为
scanf(" %c",&a[i]);
↑
space before specifier
在 之前放置空格时%c
,会scanf()
跳过输入中的任意数量的空白字符。
\n
被消耗scanf()
这就是为什么剩下的 2 个字符没有被占用的原因。
在前面添加一个前导空格%c
改成:
scanf(" %c", &a[i]);