scanf 在以下情况下返回的值是多少:
int g;
int p = scanf("%d", &g); // Originally: int p = scanf("%d", g);
我知道该scanf
函数的签名是:
int scanf(const char *format, ...)
int
这个函数返回的值是多少?
从man
页面:
NAME
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf
...
RETURN VALUE
These functions return the number of input items successfully matched
and assigned, which can be fewer than provided for, or even zero in the
event of an early matching failure.
The value EOF is returned if the end of input is reached before either
the first successful conversion or a matching failure occurs. EOF is
also returned if a read error occurs, in which case the error indicator
for the stream (see ferror(3)) is set, and errno is set indicate the
error.
在您的情况下,scanf()
可以返回0
,1
或EOF
.
从scanf:
成功时,该函数返回成功读取的项目数。如果发生匹配失败,此计数可以匹配预期的读数数量或更少,甚至为零。如果在成功读取任何数据之前输入失败,则返回 EOF。
从技术上讲,这是 UB(未定义行为)。
int g;
int p=scanf("%d",g);
^
您将一个未初始化的整数传递给 scanf 以将其用作要写入的地址。从这一点开始,任何事情都可能发生。您的应用程序很可能会崩溃。
它将返回 1,因为 scanf 返回成功读取的项目数
无论您在 VDU 输入中给出什么,都会进入变量g
,如果成功读取,则p
等于 1。