c中的什么scanf函数返回?

时间:2012-05-06 09:57:08

标签: c scanf

我知道签名是

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

这个int值与什么有关?

6 个答案:

答案 0 :(得分:40)

来自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()可以返回01EOF

P.S。正如其他人所指出的那样,你在g

面前错过了&符号
int p=scanf("%d",&g);

没有&符号,代码的行为是未定义的。

答案 1 :(得分:8)

来自scanf

  

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

答案 2 :(得分:1)

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

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

将一个单位化整数传递给scanf,将其用作要写入的地址。从现在开始,任何事情都可能发生。很可能你的应用程序会崩溃。

答案 3 :(得分:1)

当scanf返回成功读取的项目数

时,它将返回1

答案 4 :(得分:0)

我认为您的代码无法正常工作,因为您忘记了“&”在scanf函数..

int g=0; //init the variable
int p=scanf("%d",&g);

scanf函数将输入的值放入g变量地址。

答案 5 :(得分:0)

无论您将VDU输入中的内容输入变量g,如果成功读取,p等于1。