Объясните вывод следующего? - PullRequest
0 голосов
/ 01 июля 2011
#include<stdio.h>
void main()
{
    char ch;
    if((ch=printf(1234))
        printf("A");
    else
        printf("B");
}

Ответ B: Но я не знаю, какое значение присваивается ch и что происходит с printf (1234)

Ответы [ 5 ]

3 голосов
/ 01 июля 2011

Вы можете научиться использовать отладчик и посмотреть, какое значение было присвоено ch.Или вы можете добавить printf("%d\n", ch); к вашей программе и увидеть ее таким образом.

Или вы можете прочитать документацию , например Ignacio Vazquez-Abrams вне.

3 голосов
/ 01 июля 2011

со страницы руководства printf(3):

Return value
   Upon successful return, these functions return the number of characters
   printed  (not  including  the  trailing  '\0'  used  to  end  output to
   strings).
2 голосов
/ 01 июля 2011

printf возвращает количество символов, записанных в выводе. Однако в вашем коде есть несколько ошибок. Это должно выглядеть так:

#include<stdio.h>
int main()
{
    int ch;
    if(ch=printf("1234"))
        printf("A");
    else
        printf("B");

    return 0;
}

В этом случае ch будет 4, а на выходе должно быть 1234 А.

ОБНОВЛЕНИЕ: изменено на основе полученных комментариев.

1 голос
/ 01 июля 2011

Я хотел бы отметить, что ваш код может не компилироваться на большинстве современных компиляторов, особенно из-за строки 5.

Но при условии , что ваш компилятор позволяет вам это сделать, printf вернет 0 (это ваш ch), поскольку ничего не было напечатано. Следовательно, ответ Б.

0 голосов
/ 01 июля 2011

Подпись printf:

int printf(const char* restrict fmt, ...)

, и вы передали целое число для первого аргумента.

Поведение printf(1234) равно undefined Реализация определена.

5. Целое число может быть преобразовано в любой тип указателя.За исключением случаев, указанных ранее, результат определяется реализацией, может быть неправильно выровнен, может не указывать на объект ссылочного типа и может быть представлением прерывания.(6.3.2.3 Указатели)

Поведение не определено, когда 1234 указывает на допустимую строку, которая содержит спецификаторы формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...