scanf 只能将 3 个字符读取到 5 位字符数组中

scanf can only read 3 characters into a 5 position char array

本文关键字:字符 数组 读取 scanf      更新时间:2023-10-16

>编译器: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'

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

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

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

n

scanf()消耗,这就是为什么其余 2 个字符不被占用的原因。

%c之前添加前导空格

更改为:

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