繁体   English   中英

为什么不能将scanf语句直接分配给C中的变量?

[英]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); 

你在做什么,首先创建aint 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM