2017-10-26 2 views
-1

私はK & R Programming BookからCを学んでいます。ほとんどの練習問題では大丈夫です。この特定の練習を除いて、私はWindows 10でCMDを介してそれを実行し、文字を入力してEnterキーを押すと結果は0101のボックスになります。 [?]この特定の演習でCコードを実行すると、私のCMDが[?]という文字を印刷するのはなぜですか?

運動1-9

例:コードを実行した後、私は、CMDラインに入力として「こんにちは」と入力し、Iは入力キーを押した後、結果があります。

すべての回答に感謝します。ありがとうございます。

編集:また

#include <stdio.h> 

main(void) 
{ 
int c; 

while((c = getchar() != EOF)) { 
    if (c == ' ') /* find a blank */ 
    { 
     putchar(' '); /* print the first blank */ 
     while((c = getchar()) == ' ') 
      ; 
    } 
    if (c != EOF) /*print normal character */ 
     putchar(c); 
    } 
} 

いくつかの情報:GCCを使用してメモ帳++

+0

コードはどこですか?結果は何ですか? –

+0

質問に誤ったエンコーディングの文字をコピーしたようです。正しくレンダリングされません。 WindowsのエンコーディングはUTF(-8)と同じではないと思います。 – Evert

+0

ようこそstackoverflow.comへようこそ。 [ヘルプページ](http://stackoverflow.com/help)、特に[ここではどのトピックを聞くことができますか?](http://stackoverflow.com/help/)のセクションを読んでください。 on-topic)と[[どのような種類の質問を避けるべきですか?]](http://stackoverflow.com/help/dont-ask)を参照してください。また、[ツアーを受けてください](http://stackoverflow.com/tour)と[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)もご覧ください。最後に、[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)の作成方法を学んでください。 –

答えて

1

問題は、この行です:

while((c = getchar() != EOF)) { 

それは次のようになります。あなたと

while((c = getchar()) != EOF) { 

バージョン、y実際にgetchar() != EOFの値をcに割り当ててください。 EOFに達していない場合は0になります。

+0

これは意味があります。これは本で説明されていますが、正しくグループ化する必要があります。ありがとうございました。 – dotpython

1

これはoperator precedenceの問題です。

c = getchar() != EOFは、c = (getchar() != EOF)に等しい。私。変数cgetchar() != EOFの結果を割り当てます。この後にc1または0のいずれかになります。

あなたはあなたが持っている余分な括弧とその配置場所について考える必要があります。

+0

これは意味があります。これは本で説明されていますが、正しくグループ化する必要があります。ありがとうございました。 – dotpython

関連する問題