scanf
возвращает количество успешных преобразований и назначений.В вашем случае вы сканируете только один аргумент, поэтому scanf
либо вернет 1
в случае успеха, 0
в случае совпадения при сбое (где вводится первый непробельный символ)не является десятичной цифрой) или EOF
в конце файла или в ошибке.
Когда вы вызываете printf
, каждый из его аргументов оценивается , и результат передается функции.В этом случае оценка включает вызов функции scanf
.Значение, возвращаемое scanf
, затем передается в printf
.
По сути, это то же самое, что и запись
int count = scanf( "%d", &n );
printf( "%d\n", count );
Что касается хихиканья, посмотрите, что произойдет, когда вы введете abc
или наберете Ctrl D (или Ctrl Z в Windows).
Обратите внимание, что printf
также возвращает значение (количество байтов, записанных в поток)Таким образом, вы можете написать что-то смешное 1 , как
printf( "num bytes printed = %d\n", printf( "num items read = %d\n", scanf( "%d", &n ) ) );
Шутка.Не делай этого.