我在C中创建了一个读取字符数组的程序。它没有正常工作。
#include <stdio.h>
int main()
{
char a[50];
int n, i;
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%c", a+i);
for(i=0; i<n; i++)
printf("%c ", *(a+i));
return 0;
}
这个节目没有读过我想要的角色。
输入
5
a b c d e
程序已打印
a b
当我将scanf("%c", a+i)
更改为scanf(" %c", a+i)
时,它工作正常。
有人可以解释一下为什么第一个代码没有按照我的意愿工作吗?
答案 0 :(得分:2)
scanf("%c", a+i);
无效,因为它占用了之前stdin
调用中scanf
缓冲区中剩余的换行符。格式字符串%c
中的scanf
转换说明符与字符匹配,并且前导空格的通常跳过被抑制。在格式字符串scanf
scanf(" %c", a + i);
// ^ note the leading space
表示scanf
将读取并丢弃任意数量的前导空格字符。因此它适用于您的情况。
答案 1 :(得分:0)
仔细阅读scanf(3)的文档(这是一个标准的C函数,而不是惯用的C ++)。
格式字符串:
· A sequence of white-space characters (space, tab, newline, etc.; see isspace(3)). This directive matches any amount of white space, including none, in the input.
更具C ++的方法是使用operator >>或get的std::istream成员函数
答案 2 :(得分:0)