Вопрос по c – Какая функция scanf в c возвращает?

23

Я знаю, что подпись

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

С чем связано это значение int?

1. Ваш код неверен не & amp; 2. почему вы просто не печатаете f (& quot;% d & quot; p), чтобы увидеть значение p NullPoiиteя
Ваш код неверный, хотя. Так должно бытьint p=scanf("%d", &g); так что это неопределенное поведение. Flexo♦
Функция может даже не вернуться. Может быть, вы имели в видуint p=scanf("%d", &g);? wildplasser
Я не думаю, что имеет смысл продолжать опускать эти вопросы ... gliderkite
@Bulwersator Если кто-то не может прочитать справочную страницу, то это не форум для таких вопросов. В этом случае может быть 1000 единиц что-то-возвращаемое-значение-функции-XYZ во всех языках программирования. В этом вопросе отсутствуют основополагающие исследования, и его не следует поощрять. P.P.

Ваш Ответ

6   ответов
39

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.

Постскриптум Как уже отмечали другие, вам не хватает амперсанда передg:

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

Без амперсанда поведение вашего кода не определено.

scanf() возвращает количество успешно отсканированных и назначенных элементов. Если строка формата"%s %d %f %*s%n %d", он возвращает 4, если все работает.%*s подавляет присваивание, поэтому оно не учитывается, и%n возвращает смещение и не считается. Если вы получили 0, 1, 2 или 3, что-то пошло не так. Вы возвращаете EOF, только если не осталось данных для чтения или имеется ошибка ввода (не ошибка форматирования, а ошибка аппаратного обеспечения). С"%d" формат, есть только одно преобразование, так что вы получитеEOF, 0 или же1.
1

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

Вы передаете в scanf единое целое число, чтобы использовать его в качестве адреса для записи. С этого момента все может случиться. Скорее всего, ваше приложение будет зависать.

0

g и если успешно читать,p равно 1

1

так как scanf возвращает количество успешно прочитанных элементов

8

зсапЕ:

On success, the function returns the number of items successfully read. This count can match the expected number of readings or fewer, even zero, if a matching failure happens. In the case of an input failure before any data could be successfully read, EOF is returned.

0

что ваш код не будет работать правильно, потому что вы забыли & quot; & amp; & quot; в функции scanf ..

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

функция scanf поместит введенное значение в адрес переменной g.

Как вы думаете, почему переменная должна быть инициализирована?

Похожие вопросы