2011-07-07 2 views
0
#include <stdio.h> 

#include <string.h> 

int main() 

{ 

unsigned char a; 

FILE *P; 

P=fopen("mola.txt","r"); 

while((a=getc(P))!=EOF) 

printf("%c",a); 

} 

これらのコードで何が問題になりますか?私がコンパイルすると警告が表示されます。 "データ型の範囲が限られているため、比較は常に正しいです。"その警告はどういう意味ですか?なぜこれらのCコードが機能しないのですか?これらの何が間違っていますか?

答えて

7

あなたはchargetcの結果を格納しています。 intである必要があります。また、C FAQもあります。また、fopenの戻り値を確認する必要があります。

P=fopen("mola.txt","r"); 
if (NULL == P) { 
    perror("fopen"): 
} 

また、whileが怪しいようです。インデントしてみてください。

while((a=getc(P)) != EOF) 
    printf("%c",a); 
+0

何も出力されないだけのブランク出力です。 – cody

+0

中括弧を常に使用するようにしてください。これは、1行であっても、はるかにクリーンです。 CはPythonではありません。 –

+0

申し訳ありませんが私は間違いを私はあなたのcnicutarを完了しました – cody

0

それはループ意志を意味はa=getc(p)で終了するプログラムを許可しない無限ループに陥りました。

1

それは

比較がデータ型の範囲制限によって、常に真であると言うだけで何を意味しています。

unsigned charあるa)問題のデータ・タイプの範囲は、(実際UCHAR_MAX)0から255までです。

EOF値は-1あなたは条件が常にtrueになります-1

(a != -1) 

で(0から255まで)aを比較している

1

試してみてください。

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
int a; 
FILE *P; 
P=fopen("tryit2.c","r"); 
while(EOF != (a = fgetc(P))) { 
     printf("%c",a); 
    } 
} 

2つの問題がありました。「getc()」は文字ではない整数を返します。そして、whileステートメントには元の順序でいくつかの奇妙な副作用がありました。

+0

あなたはそれを行う必要がありますintに署名されていない文字を修正していない!それはOPが書いたのと同じです! – ShinTakezou

+0

@Shin - oops、間違ったバージョンを貼り付けた!それを指摘してくれてありがとう! –

関連する問題