web-dev-qa-db-ja.com

scanf関数は何を返しますか?

scanf関数のシグネチャは次のとおりです。

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

この関数から返されるint値は何ですか?

23
Rachit

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を返すことができます。

40
NPE

scanf から:

成功すると、関数は正常に読み取られたアイテムの数を返します。一致の失敗が発生した場合、このカウントは予想される読み取り値の数に一致するか、それ以下、またはゼロになります。データが正常に読み取られる前に入力が失敗した場合、EOFが返されます。

8
gliderkite

技術的にはこれはUB(未定義の動作)です。

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

単一化された整数をscanfに渡して、書き込み先のアドレスとして使用します。この時点から、何でも起こります。ほとんどの場合、アプリはクラッシュします。

1
Karoly Horvath

Scanf関数の「&」を忘れているため、コードが正しく機能しないと思います。

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

scanf関数は、入力された値をg変数アドレスに入れます。

0
M.J.Ahmadi

scanfが正常に読み取られたアイテムの数を返すため、1を返します

0
Taranjeet

VDU入力で指定するものは何でも変数gに送られ、正常に読み取られた場合、pは1になります。

0
Shubham Nigam