printf апостроф заменяется на Æ в C - PullRequest
2 голосов
/ 25 января 2012

Это часть моего первого компьютерного задания, мы пишем программу на C, которая оценивает несколько уравнений.Вот код, который дает непонятный результат:

// 1. Newton’s Second Law of Motion
printf("Newton's Second Law of Motion \nPlease enter mass and acceleration as decimal-point values separated by a comma (ex. 150.0,5.5): ");
scanf("%lf, %lf", &mass, &accel);
printf("Newton’s Second Law of Motion: force = mass * acceleration = %lf * %lf = %lf\n\n\n", mass, accel, mass*accel);

Когда программа запускается, первый printf отображается нормально, а второй показывает «ньютоновские» вместо «ньютоновских».

Ответы [ 4 ]

8 голосов
/ 25 января 2012

Вы используете UNICODE?

Похоже, в апострофе есть разница: Newton’s против Newton's. Вы копировали-вставляли откуда-то?

5 голосов
/ 25 января 2012

Однобайтовый символ со значением 0x92 будет отображаться по-разному в разных системах в зависимости от действующей кодовой страницы.

Кодовая страница 437 (широко распространена в США) отображает символ Æ для этого значения.

другие кодовые страницы, такие как кодовая страница 1252 (западноевропейская), дисплей .

2 голосов
/ 25 января 2012

Для апострофа используются два разных символа. Первый ' является частью набора символов ASCII, который лежит в основе всех современных наборов символов и является одинаковым во всех них. Второй - это расширенный символ, который не является частью базы и может интерпретироваться по-разному в зависимости от вашего набора символов или кодовой страницы. Символ Æ находится в позиции 0x00c6 в кодировке Windows-1252 .

1 голос
/ 25 января 2012

Скорее всего, здесь происходит то, что вы скопировали текст из источника, а не вводили его вручную. Этот источник, скорее всего, имел символы в кодировке UNICODE вместо 7/8-битных символов ASCII.

Я могу ошибаться, но я вполне уверен, что printf поддерживает только 8-битный ASCII, и, следовательно, урезал ведущие данные вашего апострофа UNICODE widechar.

Требуемый символ: 0x27 (десятичное 39) '

Введенный вами десятичный символ 92 ’, который в зависимости от кодовой страницы может отображаться как Æ

Надеюсь, это прояснится.

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