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

时间:2019-07-08 01:40:23

标签: c scanf

int a = scanf("%d", &a);int a; scanf("%d", &a);有何区别?

我需要一些帮助,以了解这两件事在幕后的工作方式,因为它们显然会输出不同的结果。

2 个答案:

答案 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或零。