Я использовал функцию "putchar ()", чтобы напечатать результат теста, но вместо этого я получил знак вопроса - PullRequest
1 голос
/ 19 октября 2019

Так же, как в заголовке, я пытался использовать putchar() для вывода результата, отличного от теста !=, но на выходе я получил знак вопроса.

Здесьэто код:

#include <stdio.h>
main()
{

    int c;
    c = getchar() != EOF;
    putchar(c);
}

Я использовал printf(), и он работает:

#include <stdio.h>
main()
{

    printf("%d",getchar()!=EOF);
}

Мой вопрос: Почему это не работает с putchar?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Во-первых, принимая, что сравнение getchar()!=EOF даст логическое значение, которое будет преобразовано либо в 1 (для истины), либо в 0 (ложь), когда интерпретируется как любой целочисленный тип, оператор:

printf("%d",getchar()!=EOF);

печатает значение этого преобразования в виде в формате целое число - так вы увидите напечатанные «1» или «0».

Однако, оператор:

putchar(c);

выводит фактический символ, представленный значением c (часто, но не обязательно, значением ASCII). Символы, представленные 0 и 1, не являются печатными символами, поэтому ваша консоль отобразит что-то, указывающее, что - в вашем случае, знак вопроса.

0 голосов
/ 19 октября 2019

putchar отправляет символ, идентифицируемый его значением кода, на стандартный вывод. 0 и 1 не являются, в большинстве реализаций C, кодами для символов «0» или «1». Чтобы получить кодовое значение для «0» или «1» из int c, содержащего 0 или 1, используйте '0' + c.

printf("%d",getchar()!=EOF), чтобы отформатировать значение аргумента как десятичную цифру, чтобы он генерировалсоответствующие символы.

...