scanf 只能将 3 个字符读取到 5 位字符数组中
scanf can only read 3 characters into a 5 position char array
>编译器: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]);
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?