【问题标题】:Why is scanf always returning 1? [duplicate]为什么scanf总是返回1? [复制]
【发布时间】:2017-03-31 17:20:53
【问题描述】:
#include <stdio.h>    

int main() {
    int days = scanf("%d", &days);
    printf("%d", days);
    return 0;
}

无论如何结果都是1。

7
1

我已经多次使用 scanf 并且从未遇到过这种情况。这里有什么关系?

【问题讨论】:

  • 你刚刚用scanf函数的返回码破坏了days的值。
  • scanf的文档不清楚怎么办?
  • 是时候阅读手册页了吗?

标签: c scanf


【解决方案1】:

这是正确的,因为scanf() 返回成功匹配和转换的元素的数量。考虑到您的情况是正确的输入,每次您的输入通过转换时,您都会看到值 1。

注意,scanf()不返回扫描的值本身,它把值存储在传递的参数中。

引用C11,第 7.21.6.4 章

[...] scanf 函数返回 分配的输入项的数量,可以少于提供的数量,甚至为零 早期匹配失败的事件。

【讨论】:

  • @user3643077:你必须在其他地方做不同的事情。
【解决方案2】:

scanf 的返回类型是表示它是否成功读取了一个整数。

这将满足您的期望

#include <stdio.h>    

int main() {
    int days = 0;
    scanf("%d", &days);
    printf("%d", days);
    return  0;
}

【讨论】:

  • 这并不意味着你应该忽略它。
  • 谢谢。字符限制
  • @WeatherVane 同意,但这是一个非常简单的程序。我只是想证明 OP 所询问的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多