Персонаж Putchar появляется в начале моей функции printf

Используя этот код

void echo_char_code() {
    int x;
    printf ("Please enter a character:\n");
    x = getchar();
    printf("The character code of '%c' is %d", putchar(x), putchar(x));
    printf(". \n");
}

int main() {
    echo_char_code();
    return 0;
}

но по какой-то причине мой вывод

AAThe character code of 'A' is 65.

и мне интересно, почему "АА" появляется в начале, а не просто как "А" и "65", которые я тоже хочу.

2 ответа

Вы не должны передавать putchar(x) в качестве аргумента, вместо этого используйте переменную x.

void echo_char_code() {
    int x;
    printf ("Please enter a character:\n");
    x = getchar ();
    printf("The character code of '%c' is %d", x, x)); // changing putchar(x) to x solves the problem.
    printf (". \n");
}

int main() {
    echo_char_code();
    return 0;
}

В этой строке

printf("The character code of '%c' is %d",putchar(x),putchar(x));

ты звонишь putchar() дважды, что выводит х дважды.
Вы также используете возвращаемые значения этих двух вызовов для форматированного вывода.
Возвращаемое значение putchar() бывает (в случае успеха) письменный символ, что делает его несколько прозрачным.
Порядок этого, вероятно, не предсказуем, но он объясняет ваш наблюдаемый результат.

Сравните https://en.cppreference.com/w/c/io/putchar
Говорится

Возвращаемое значение
В случае успеха возвращает письменный символ.

Другие вопросы по тегам