Printf печатает неправильный специальный символ - PullRequest
0 голосов
/ 02 июня 2018

Я работаю в коде C / C ++, который преобразует символ в его целочисленное значение, а затем должен напечатать его обратно в его значение.

Но, когда я пытаюсь напечатать "Extended ASCII"символ, использующий функцию printf, он показывает другой символ, и я не могу понять, в чем дело.

int charInt = (int) 'á'; // -31
char casted = (char) charInt;
printf("%c\n", casted); // ß

Если я отлаживаю код (я использую Visual Studio 2017), переменная ' casted 'показывает правильное значение' á 'в IntelliSense.

Я тестировал несколько разных способов печати этого символа, но он всегда дает один и тот же результат:

printf("test: %d\n", (signed char)'á');   // -31
printf("test: %d\n", (unsigned char)'á'); // 225
printf("test: %c\n", -31); // ß
printf("teste: %s\n", "á"); // ß
printf("test: %c\n", 225); // ß
printf("test: %d\n", 'á'); // -31
putc(-31, stdout); // ß

ЧтоЯ делаю не так?

1 Ответ

0 голосов
/ 02 июля 2018

Это была проблема локали, как сказано в комментариях к моему вопросу.

Мне просто нужно было использовать setlocale (), и вывод в консоли работал.

...