【问题标题】:Different behaviour of scanfscanf 的不同行为
【发布时间】:2016-12-05 07:49:35
【问题描述】:

有什么区别

scanf("%s", c);

scanf(" %s", c);

它会以任何方式影响我的程序吗? 提前致谢。

【问题讨论】:

  • 不,没有区别。
  • 它会做同样的操作。
  • 您可能需要在字里行间阅读。在格式说明符之前留下space会导致scanf在进行转换之前跳过前导空格。因此,根据您的输入,是的,它会影响您的程序。见man scanf “指令是以下之一:”
  • 请仔细阅读 cmets,我们不会告诉您如何读取其中包含空格的字符串(尽管这是 answer 告诉您的内容)跨度>

标签: c input scanf


【解决方案1】:

scanf%s 转换说明符会跳过前导空白字符并解析一个单词,直到但不包括后续空白。

%s前面加一个空格没有效果,完全是多余的。

%d%f 也是如此,但%c%[ 则不然。

还要注意%s%[ 说明符是有风险的,因为您没有为scanf 提供存储到目标中的字符数的任何限制。这对于sscanf() 可能没问题,因为转换受到源字符串内容的隐式限制,但对于scanffscanf 必须避免。

您可以在%s 之间提供一个数字参数,以表示在空终止符之前要存储的最大字符数:

    char buffer[100];
    if (scanf("%99s", buffer) == 1) {
        /* a word was parsed correctly into buffer */
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多