这个输出是3可以有人告诉我怎么样?

时间:2017-06-03 14:06:41

标签: c printf scanf

int main()
{

    long int a = scanf("%ld %ld %ld",&a,&a,&a);
    printf("%ld",a);
    return 0;   
}

这个输出是3可以有人告诉我怎么样?

4 个答案:

答案 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,它可以返回EOF012或{{ 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的方式。