[英]Why can't I assign a scanf statement directly to a variable in C?
int a = scanf("%d", &a);
与int a; scanf("%d", &a);
不同int a; scanf("%d", &a);
int a; scanf("%d", &a);
?
我需要一些帮助,以了解这两件事在幕后的工作方式,因为它们显然会输出不同的结果。
scanf
是C语言中的标准输入函数。
关于scanf
您应该了解的第一件事是“返回值”。 如果您在Linux上,请通过访问man scanf
来参考scanf
的手册页。
scanf
返回从标准输入读取的值的数量。 也就是说,在这种情况下,您的scanf
将返回1,因为仅读取了一个值。
所以如果你跑
int a = scanf("%d", &a);
首先,表达式int a
将创建一个新的int变量,其大小为int(4个字节)。 然后scanf("%d", &a)
将通过标准输入输入size int的值。 假设您输入5。
但是,当您将scanf
返回的值设置为a
,即从标准输入中读取的值为1。因此,无论您输入什么值, a
始终为1。
现在,至于
int a;
scanf("%d", &a);
你在做什么,首先创建a
与int a
。 然后,您“不”将scanf
的返回值保存在任何地方。 这意味着从scanf
,您输入的任何值都会读入a
。 就是这样。 返回值(对于scanf
,返回值是输入值的数量;在这种情况下,我们仅输入一个值,因此它是1)没有被馈送到a或任何其他变量。 因此, a
现在具有您先前从标准输入中输入的值。
int a; scanf("%d", &a);
在上面的代码中,声明了一个整数变量,并将其地址传递给scanf函数,因为在scamf函数内部对get的值进行了修改。因此,为了反映主函数中的更改,您必须传递地址。 scanf函数从标准输入流stdin中读取输入,并且a的值将更改为该值。
int a = scanf("%d", &a);
在这段代码中,scanf的工作也类似。但是在scanf函数之后,它的返回值分配给了a。 scanf函数返回成功匹配和分配的输入项的数量,该数量可以少于提供的数量,如果早期匹配失败,则为零。因此,此处a的值为1或零。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.