2017-02-20 7 views
-1

私はカーニハンリッチーを読んでいたし、プログラムを数え、この文字がありますので、私は、私はいくつかの文字を入力した後、それ以降何も出力がない、コンパイルし、このコードを実行すると私のCキャラクタと行数計算プログラムの何が問題なのですか?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
char c; 
int i; 
c = getchar(); 
while (c != EOF) 
    i= i + 1; 
printf("%d",i); 
}` 

を実装してみました。番号は印刷されていないので、私は理由を理解できません。コードは正常に見えます。私もscanf()を使ってみましたが、同じことが起こりました。

次の例は入力行数をカウントするためのもので、同じ問題もありました。あなたのコードで

+4

C++がC言語でないことに注意してください。 –

+1

c!= EOFの場合whileループは無限 –

+3

int i = 0、c; while((c = getchar())!= EOF) i = i + 1; – BLUEPIXY

答えて

7

、あなたが

i= i + 1; 

iの初期値は不定ですが当たっています。したがって、プログラム全体がundefined behaviorを呼び出します。 iを初期化する必要があります。

具体的には、明示的に初期化されていない限り、自動ローカル変数であるため、内容は不確定です。この場合不確定な値を使用するとUBにつながります。

つまり、charEOFの値を保持できないため、タイプをintに変更してください。


その後、論理が間違っています。 getchar()はそれ自身のループではありません。内のを呼び出し、の状態チェックで使用されるcの値を更新する必要があります。

+0

oops、はい私は0にiを割り当てたが、それは問題を解決しなかったし、どちらも変数cの型をintに変更しなかった。私は質問を編集しました。 – user127

+0

...と['getchar'](http://www.cplusplus.com/reference/cstdio/getchar/)は' char'ではなく 'int'を返します。 –

0

初期化に失敗しました:

int i = 0;

2
int main() 

良い。 main()ではなく、void main()ではありません。このようにしてください。

{ 
char c; 

悪い。 getchar()を返します。

int i; 

悪い。初期化されていない、値は不定です。あなたは増分するつもりです-7445219、またはおそらく腎臓パイ、知っている。

c = getchar(); 

あなたは1文字を読みました。

while (c != EOF) 

しかし、あなたはcharに収まらないEOFEOFためにそれを比較することはできません。

i= i + 1; 

ループの本体で何かをするのを忘れたようです。あなたのループが終わるチャンスがあるように、おそらくcを変更しようとしているもの。

printf("%d",i); 

出力の最終行に改行を追加することをお勧めします。

} 

これはすべての人々です。

1

は、あなただけの "i"

のint i = 0のためinicializationを追加する必要があります。

関連する問題