2012-01-24 2 views
2

Это часть моего первого задания comp sci, мы пишем программу C, которая оценивает несколько уравнений. Вот код, который дает на шаткий результат:printf apostrophe заменяется на Æ в 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 дисплеи хорошо, но второй отображает «NewtonÆs» вместо «Ньютона».

+3

http://en.wikipedia.org/wiki/Mojibake –

+1

* Текст * - очень и очень сложная тема. В то время как вы сосредотачиваетесь на обучении C, придерживайтесь основных английских символов, пока не будете готовы потратить некоторое серьезное время, чтобы подумать о тонкостях цифрового письма. –

+1

Это код юникода \ u2019, «Правильный одиночный котировочный знак». Не многие из них будут узнаваемы после компилятора и консоли/терминала, которые вы используете, чтобы пропустить его. Создайте свой собственный код, избегая копирования с веб-страниц. –

ответ

8

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

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

+0

точка взята, это, вероятно, источник unicode ... – Firoso

+2

А, я должен! Это исправило это. Большое спасибо! – MatronSaint

1

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

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

Персонаж вы хотите 0x27 (десятичное 39) '

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

Я надеюсь, что очищает его.

5

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

Code page 437 (обычный в США) отображает символ Æ для этого значения.

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

2

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

Смежные вопросы