c - 读取字符数组

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

有人能解释一下为什么第一个代码没有按我想要的那样工作吗?

最佳答案

scanf("%c", a+i); 没有工作,因为它消耗了前一个 scanf< 中留在 stdin 缓冲区中的换行符 调用。 scanf 的格式字符串中的 %c 转换说明符匹配一个字符,并且通常跳过前导空格被抑制。当你在 scanf

的格式字符串中添加一个前导空格时
scanf(" %c", a + i);
   //  ^ note the leading space

表示 scanf 将读取并丢弃任意数量的前导空白字符。因此它适用于您的情况。

关于c - 读取字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22920813/

相关文章:

python - 如何修改 STDOUT?

我们可以在模板源文件中使用 CMake foreach 吗?

c - 当传递给 C 中的函数时丢失 char**array 的内容

计算字母字符数的 Python 函数,跟踪 "e"出现的次数

Java - 以类似于二维数组的方式访问字符串中的字符?

segmentation-fault - Gfortran : Segmentation fault with long character

c - 使用 FFT 重复计算函数导数时产生的数值误差

c - C 中的 Rand() 函数用于随机 ASCII - 字符(仅限字母和数字)

javascript - 使用数组和 Javascript 进行有限的复选框选择

c# - 在 C# 中,是否可以有一个大数组,然后是指向较大数组的子部分的较小数组?