2012-01-24 78 views
2

這是我第一次編寫科幻作業的一部分,我們正在編寫一個評估幾個方程式的C程序。這裏是給靠不住的結果代碼:printf撇號被替換爲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

這是Unicode codepoint \ u2019,「右單引號」。編譯器和您使用的控制檯/終端在對其進行編譯之後,沒有多少內容會被識別。編寫你自己的代碼,避免從網頁上覆制。 –

回答

8

你使用的是UNICODE嗎?

似乎撇號中有一個區別:Newton’s vs Newton's。你是從哪裏複製粘貼的?

+0

點了,它可能是一個unicode源... – Firoso

+2

啊,我必須有!這解決了它。非常感謝你! – MatronSaint

1

這裏最有可能發生的是您從源文件複製文本,而不是手動輸入文本。該源可能具有UNICODE編碼字符而不是7/8位ASCII字符。

我可能是錯的,但我相當肯定,printf只支持8位ASCII,因此截斷了UNICODE widechar撇號的前導數據。

你想要的字符是0×27(十進制39)「

您鍵入的字符是十進制92」,這取決於代碼頁可能顯示爲Æ

我希望清除它。

5

根據當前生效的代碼頁,單字節字符的值爲0x92,將在不同系統上顯示不同。

Code page 437(在美國通用)顯示此值的Æ字符。

其他代碼頁,如codepage 1252(西歐),顯示

2

撇號有兩種不同的字符。第一個'是位於所有現代字符集的基礎上的ASCII字符集的一部分,並且它們都是相同的。第二個是一個擴展字符,它不是基本的一部分,根據你的字符集或代碼頁,它會受到不同的解釋。字符Æ位於Windows-1252編碼中的位置0x00c6處。