#c #printf
#c #printf
Вопрос:
Кто-нибудь может объяснить, как это работает, вывод A3, но почему он печатает 3
#include <stdio.h>
int main() {
int i;
if(printf("A"))
i=3;
else
i=5;
printf("%d",i);
}
Ответ №1:
printf()
возвращает количество символов при успешном выполнении и отрицательные значения при сбое.
Следовательно, в случае printf("A")
успешного выполнения он вернет 1
.
В C значения, отличные от 0
, рассматриваются как true, поэтому i=3;
выполняется.
Ответ №2:
Давайте проверим поток:
int i; --> i has indeterminate value
if(printf("A")) --> prints A and returns 1, so the condition is TRUE (see note)
i=3; --> This statement is executed
else --> this condition is skipped
i=5; --> so this does not execute
printf("%d",i); --> prints the value of i which is 3.
Окончательный отпечаток есть A3
.
Тем не менее, если спецификация преобразования не требуется, вместо использования printf()
следует использовать puts()
или fputs()
.
Примечание:
От man printf()
Возвращаемое значение После успешного возврата эти функции возвращают количество напечатанных символов (исключая нулевой байт, используемый для завершения вывода в строки).
Ответ №3:
хитрость, позволяющая понять это поведение, находится здесь и возвращает значение od printf
возвращает количество символов при успешном выполнении и отрицательные значения при сбое. это здесь:
if(printf("A"))
может быть прочитан как
int r = printf("A");// at this point r ==1
if(1) //this here is true so i is assigned to 3