2012-01-24 9 views
2

これは私の最初のcompsc課題の一部です。いくつかの方程式を評価する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のコードポイント\ u2019、 "Right Single Quotation Mark"です。コンパイラとコンソール/ターミナルの後でそれを認識することはほとんどありません。あなた自身のコードを書いて、ウェブページからのコピーを避けてください。 –

答えて

8

UNICODEを使用していますか?

アポストロフィに違いがあるようです:Newton’sNewton's。どこからコピー貼り付けましたか?

+0

ポイントは、おそらくユニコードソース... – Firoso

+2

ああ、私は持っている必要があります!それはそれを修正した。どうもありがとうございました! – MatronSaint

1

ここで起こっている可能性が最も高いのは、手書きではなく入力元からテキストをコピーしたことです。このソースには、7/8ビットASCII文字の代わりにUNICODEエンコード文字が含まれている可能性があります。

私は間違っている可能性がありますが、printfは8ビットASCIIしかサポートしていないため、UNICODEワイドキャラクタのアポストロフィの先頭のデータを切り捨てました。

したい文字が、私はそれはそれをクリア願ってい

Æとしてコードページによっては表示されることがあり「あなたが入力した文字は、小数点92で

」は0x27(十進39)です。

5

値0x92を持つ1バイト文字は、現在有効なコードページによって異なるシステムで異なる表示をします。

Code page 437(米国では一般的)は、この値に対してÆ文字を表示します。

codepage 1252(西ヨーロッパ言語)のような他のコードページは、と表示されます。

2

アポストロフィには2つの異なる文字が使用されています。最初の'は、すべての現代の文字セットのベースにあるASCII文字セットの一部であり、すべて同じです。 2番目のは、拡張文字で、ベースの一部ではなく、キャラクタセットまたはコードページによって異なる解釈が適用されます。文字Æは、Windows-1252エンコーディングの0x00c6の位置にあります。