2017-03-31 297 views
-7
#include <stdio.h>  

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

无论结果如何,结果都是1。为什么scanf总是返回1?

7 
1 

我已经使用scanf很多次了,从来没有遇到过这种情况。这里的交易是什么?

+5

你刚刚从'scanf'功能**返回码**重挫days'的'值。 – t0mm13b

+1

'scanf'的文档不清楚吗? – Olaf

+4

确实要阅读手册页的时间? –

回答

3

这是正确的,因为scanf()返回成功匹配和转换元素的数量。考虑你的情况正确的输入,您的每一次输入经过转换,所以你能看到值1

注意点,scanf()不返回扫描的价值本身,它存储在传递的值论据。

引用C11,章§7.21.6.4

[...]的scanf函数返回 号码输入项目的分配,其可以是少于规定的,或甚至零,在该 早期匹配失败的事件。

+0

谢谢。字符数限制 – user3643077

+2

@ user3643077:您必须在其他地方以不同的方式执行此操作。 –

0

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

这将做你期待什么

#include <stdio.h>  

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

这并不意味着你应该忽略它。 –

+0

谢谢。 char limit – user3643077

+0

@WeatherVane同意,但这是一个非常简单的程序。我只是试图说明OP所问的行为。 –