【问题标题】:How to use scanf in a loop to get a char* array in c如何在循环中使用scanf在c中获取char *数组
【发布时间】:2015-11-26 19:21:11
【问题描述】:

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

    // 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);
    }

但是当我打印数组时,我首先发现了一个\n (first[0]),而其他字符则从place[1] 开始!为什么会这样,如何解决?

【问题讨论】:

  • i&lt;=f_l --> i&lt;f_l
  • @BLUEPIXY 一般来说,你是对的,但f_l 是用户提供的,也许 OP 想要那个 长度,谁知道呢。 :P

标签: c arrays char newline scanf


【解决方案1】:

这是因为当您为f_l 执行scanf() 时,缓冲区中会留下一个'\n'

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

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

【讨论】:

  • @Atheel 除了说“谢谢”,您还可以考虑 accepting 一个对您有帮助的答案。 :)
  • 两个答案都是正确的。如何选择一个:)?
【解决方案2】:

在您的代码中,

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 2021-02-04
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2023-03-07
    • 2023-04-03
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多