2012-02-21 17 views
0

ここに私のコードです。getc(fp)トラブルの原因

#include<stdlib.h> 
#include<stdio.h> 
int main(int argc,char** argv) 
{ 
    char a; 
    a=9; 
    FILE * fp; 
    fp=fopen(argv[1],"r"); 
    while(a!= EOF) 
    { 
     a=fgetc(fp); 
     printf("\n%d",a); 
    } 
} 

これまで出力は大丈夫ですが、私は、整数値を印刷していますので、最後に、私は(-1との奇妙な文字を取得しています。

またあるものEOFだけ? でそれを停止する方法この文字

+2

fopen()戻り値 – ydroneaud

+0

をチェックしてfclose()を忘れないでください。 –

答えて

2

を行い、あなたはまた、次のように行うことができます。

while ((a = fgetc(fp)) != EOF) 
{ 
    printf("%d\n", a); 
} 

今、あなたはいくつかの代替ソリューションを持っています。 :)

編集: Rは..そう親切に私たちを連想させるとして、あなたもintaの種類を変更する必要があります。

+0

これはCで最もよく見られる解決方法です –

+1

あなたは間違ったタイプを逃しました... –

2

あなたはEOFfgetc()直後に発生したかどうかをチェックしていないようEOF文字(-1)を印刷しているにループの構造を変更します?。

int a; /* not char, as pointed out by R... */ 

for (;;) 
{ 
    a = fgetc(fp); 
    if (EOF == a) break; 
    printf("\n%d", a): 
} 
+0

これは 'a'が間違った型(' int'ではなく 'char')を持つ問題を修正しません。 –

+0

@R ..、ありがとう - それを逃した。更新しました。それはあなたのダウンボートですか? – hmjd

+0

はい、しかし、ちょうど何かを盲目的に受け入れる前にOPが以下の正しい答えに気付くことを期待しています。今すぐ削除しました。 –

0

なぜあなたはこの条件でwhileを停止しない:

do {...}while(a != EOF) 

がそれを読んだ後、私はそのGOTのEOF値を想定。 それで、あなたは他の回答のメソッドのほかに、サイクルの余分な時間

+0

これはループを少なくとも1回実行し、fgetcがすぐに 'EOF'を返す場合は' -1'を出力します。 –

+0

@JoachimPileborg彼はその状態を予備確認することができます... – DonCallisto

+0

そうでした... –

1

aはの型を返します。戻り型の型はfgetc()であり、正しくEOFを表現する必要があります。

関連する問題