Я знаю, что подпись функции scanf
:
int scanf(const char *format, ...)
Какое значение int
возвращается из этой функции?
Я знаю, что подпись функции 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 (Undefined).
int g;
int p=scanf("%d",g);
^
Вы передаете унифицированное целое число в scanf, чтобы использовать его в качестве адреса для записи. С этого момента все может случиться. Скорее всего, ваше приложение будет разбиваться.
Я думаю, что ваш код не будет работать правильно, потому что вы забудете "&". в функции scanf.
int g=0; //init the variable
int p=scanf("%d",&g);
функция scanf поместит введенное значение в адрес переменной g.
Независимо от того, что вы дадите в входе VDU, переходите к переменной g
, и если успешно прочитано, p
равно 1.
он вернет 1, так как scanf возвращает количество успешно прочитанных элементов