int main()
{
long int a = scanf("%ld %ld %ld",&a,&a,&a);
printf("%ld",a);
return 0;
}
这个输出是3可以有人告诉我怎么样?
答案 0 :(得分:2)
使用scanf
完成&a
并完成其工作后,scanf
的返回值已分配给a
,如果是3
,则可以instance Monoid b => Monoid (a -> b) where
mempty _ = mempty
mappend f g x = f x `mappend` g x
输入以三个空格分隔的整数开始。
返回值是成功匹配和分配的输入项的编号。
答案 1 :(得分:2)
您应该阅读scanf()
手册。
返回值
这些函数返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败的情况下甚至为零。
如果在第一次成功转换或匹配失败发生之前达到输入结束,则返回值EOF。如果发生读取错误,也会返回EOF,在这种情况下,将设置流的错误指示符(请参阅ferror(3)),并设置errno指示错误。
因此,您希望scanf()
解析3 long int
,它可以返回EOF
,0
,1
,2
或{{ 1}}。
顺便说一下,3
的归还类型为scanf()
,而不是int
。
long int
答案 2 :(得分:0)
你输入3项作为输入,即使你正在收集来自scanf的所有输入,最后它将保存scanf的返回值,这是成功读取的项目数
在你的特定运行中,成功阅读了3个项目,因此持有3个
答案 3 :(得分:0)
是的,@ Pras是正确的。由于您(显然)从输入中成功读取了三个值,因此scanf的返回值为3。但是,在单个语句中多次使用同一变量的值设置非常错误的编程习惯。在此示例中,您将“a”四次次设置为值,三次作为扫描输入的结果,第四次作为返回值的赋值。如果您尚未将a指定为调用的返回值,则“a”的值将是不可预测的,因为处理参数的顺序取决于实现。如果输入“11 22 33”,“a”可能是11或33 ......甚至22,具体取决于编译器处理scanf的方式。