int a = scanf("%d", &a);
与int a; scanf("%d", &a);
有何区别?
我需要一些帮助,以了解这两件事在幕后的工作方式,因为它们显然会输出不同的结果。
答案 0 :(得分:7)
scanf
是C语言中的标准输入函数。
关于scanf
的第一件事是“返回值”。如果您使用的是Linux,请访问scanf
,以访问man scanf
的手册页。
scanf
返回从标准输入读取的值的数量。也就是说,在这种情况下,您的scanf
将返回1,因为仅读取了一个值。
因此,如果您运行
int a = scanf("%d", &a);
首先,表达式int a
将创建一个新的int变量,其大小为int(4个字节)。然后scanf("%d", &a)
将从您的标准输入中输入一个size int值。假设您输入5。
但是当您将a
设置为返回的任何scanf
时,即从标准输入读取的值的数量为1,因此a
始终为1您输入什么值。
现在,就
int a;
scanf("%d", &a);
您正在做的是,首先使用a
创建int a
。然后,您“不”将scanf
的返回值保存在任何地方。这意味着将从scanf
中输入的任何值都读入a
。就是这样。返回值(对于scanf
,返回值是输入值的数量;在这种情况下,我们仅输入一个值,因此它是1)没有被馈送到a或任何其他变量。因此,a
现在具有您先前从标准输入中输入的值。
答案 1 :(得分:1)
int a; scanf("%d", &a);
在上面的代码中声明了一个整数变量,并将其地址传递给scanf函数,因为在scamf函数内部对get的值进行了修改。因此,为了反映主函数中的更改,您必须传递地址。 scanf函数从标准输入流stdin中读取输入,并且a的值将更改为该值。
int a = scanf("%d", &a);
在这段代码中,scanf的工作也类似。但是在scanf函数之后,它的返回值分配给了a。 scanf函数返回已成功匹配和分配的输入项的数量,该数量可以少于提供的数量,在早期匹配失败的情况下甚至为零。因此,此处的a的值为1或零。