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に渡して、書き込み先のアドレスとして使用します。この時点から、何でも起こります。ほとんどの場合、アプリはクラッシュします。
Scanf関数の「&」を忘れているため、コードが正しく機能しないと思います。
int g=0; //init the variable
int p=scanf("%d",&g);
scanf関数は、入力された値をg変数アドレスに入れます。
scanfが正常に読み取られたアイテムの数を返すため、1を返します
VDU入力で指定するものは何でも変数g
に送られ、正常に読み取られた場合、p
は1になります。