如何在循环中使用scanf来获取c中的char *数组

时间:2015-09-01 13:56:41

标签: c arrays char newline scanf

我希望使用char获取scanf数组值。我用了这段代码:

    // get first array
    printf("first length:\n");
    scanf("%d", &f_l);
    printf("first number:\n");
    for(i=0 ; i<=f_l ; i++) {
        scanf("%c", &first[i]);
    }
    //start test
    printf("first number is:\n");
    for(i=0 ; i<=LEN ; i++) {
        printf("(%c | %d)", first[i],i);
    }

但是当我打印数组时,我首先找到\nfirst[0]),而其他字符则从place[1]开始!为什么会这样,以及如何解决它?

2 个答案:

答案 0 :(得分:4)

这是因为'\n'执行scanf()时,f_l会留在缓冲区中。

使用尾随空格,它应该可以工作

for(i=0 ; i<=f_l ; i++) {
    scanf(" %c", &first[i]);
}

答案 1 :(得分:3)

在您的代码中,

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

读取并存储先前输入的换行符(\n)字符。你需要改变

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

scanf(" %c", &first[i]);
       ^
       |

以避免先前输入的新行(\n)字符从之前的 ENTER 键按下。 %c之前的前导空格将导致scanf() 忽略任意数量的前导空白字符(包括换行符)并读取第一个非空白字符(预期输入)

也就是说,直接使用用户提供的值来对预定义数组进行数组索引可能会有问题。至少,检查用户输入的值是否小于定义的数组大小。