Почему scanf всегда возвращает 1?

#include <stdio.h>    

int main() {
    int days = scanf("%d", &days);
    printf("%d", days);
    return 0;
}

Результат 1 несмотря ни на что.

7
1

Я использовал scanf много раз и никогда не сталкивался с этим. В чем дело?


person user3643077    schedule 31.03.2017    source источник
comment
Вы только что затерли значение days с помощью кода возврата из функции scanf.   -  person t0mm13b    schedule 31.03.2017
comment
Что с документацией scanf непонятно?   -  person too honest for this site    schedule 31.03.2017
comment
Не пора ли прочитать справочную страницу?   -  person Weather Vane    schedule 31.03.2017


Ответы (2)


Это правильно, потому что scanf() возвращает количество успешно сопоставленных и преобразованных элементов. Учитывая правильный ввод в вашем случае, каждый раз, когда ваш ввод проходит преобразование, вы видите значение 1.

Обратите внимание: scanf() не возвращает само отсканированное значение, а сохраняет значение в переданном аргументе.

Цитирование C11, глава §7.21.6.4

[...] функция scanf возвращает количество назначенных входных элементов, которое может быть меньше, чем предусмотрено, или даже равно нулю, в случае неудачи раннего сопоставления.

person Sourav Ghosh    schedule 31.03.2017
comment
@ user3643077: вы должны делать это по-другому в другом месте. - person Jonathan Leffler; 31.03.2017

Тип возврата scanf должен указать, успешно ли было прочитано целое число.

Это сделает то, что вы ожидаете

#include <stdio.h>    

int main() {
    int days = 0;
    scanf("%d", &days);
    printf("%d", days);
    return  0;
}
person Jack Gore    schedule 31.03.2017
comment
Это не значит, что вы должны игнорировать это. - person Weather Vane; 31.03.2017
comment
Спасибо. лимит символов - person user3643077; 31.03.2017
comment
@WeatherVane Согласен, но это чрезвычайно простая программа. Я просто пытаюсь продемонстрировать поведение, о котором спрашивал ОП. - person Jack Gore; 31.03.2017