读数组的字符

时间:2014-04-07 19:01:56

标签: c arrays character printf scanf

我在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)时,它工作正常。

有人可以解释一下为什么第一个代码没有按照我的意愿工作吗?

3 个答案:

答案 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 >>getstd::istream成员函数

答案 2 :(得分:0)

空白区域也是一个角色。您可以参考此处的文档:

http://www.cplusplus.com/reference/cstdio/scanf/

你正在读5个,2个字符,2个空格后的新行。