32

scanf 在以下情况下返回的值是多少:

int g;
int p = scanf("%d", &g);      // Originally: int p = scanf("%d", g);

我知道该scanf函数的签名是:

int scanf(const char *format, ...)

int这个函数返回的值是多少?

4

5 回答 5

48

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,1EOF.

于 2012-05-06T09:58:49.403 回答
8

scanf

成功时,该函数返回成功读取的项目数。如果发生匹配失败,此计数可以匹配预期的读数数量或更少,甚至为零。如果在成功读取任何数据之前输入失败,则返回 EOF。

于 2012-05-06T10:05:43.220 回答
0

从技术上讲,这是 UB(未定义行为)。

int g;
int p=scanf("%d",g);
                 ^

您将一个未初始化的整数传递给 scanf 以将其用作要写入的地址。从这一点开始,任何事情都可能发生。您的应用程序很可能会崩溃。

于 2012-05-06T10:10:25.310 回答
0

它将返回 1,因为 scanf 返回成功读取的项目数

于 2014-01-12T13:37:48.930 回答
0

无论您在 VDU 输入中给出什么,都会进入变量g,如果成功读取,则p等于 1。

于 2013-10-12T18:56:20.020 回答