2017-03-22 1 views
0

"file1"という名前のファイルから入力を読み込もうとすると、ファイル内の文字の数が正しく認識されません( )。getc()を使用してファイルから読み込んだ文字を表示する方法

while(c=getc(ifp) !=EOF){ 

ためoperator precendenceの、このgetc(ifp) !=EOFが最初に実行されます:以下 は、問題がここにあるコード

#include <stdio.h> 
#include <stdlib.h> 
void db_sp(FILE*); 

int main(int argc,char *argv[]) 
{ 
    FILE *ifp,*ofp; 

    if(argc!=2) { 
     fprintf(stderr,"Program execution form: %s infile\n",argv[0]); 
     exit(1); 
    } 
    ifp=fopen(argv[1],"r"); 
    if (ifp==NULL) printf("sdaf"); 
    //ofp=fopen(argv[2],"w+") ; 
    db_sp(ifp); 
    fclose(ifp); 
    //fclose(ofp); 
    return 0; 
} 

void db_sp(FILE *ifp) 
{  
    char c; 
    while(c=getc(ifp) !=EOF) { 
     //printf("%c",c); 
     putc(c,stdout); 
     if(c=='\n' || c=='\t' || c==' ') 
     printf("%c",c); 
    } 
} 
+1

あなたの質問にコードを投稿してください。 –

+0

ファイルに含まれているものを表示できますか?プリンターは何を印刷しますか? – Yashas

答えて

2

があります。その後、c = <result of comparison>が実行されます。あなたが望む秩序ではありません。

正しい順序を強制するためにかっこを使用します。

while((c=getc(ifp)) !=EOF) { 

その他の注意事項: getcので、あなたがintcの種類を変更する必要がありintを返します。 また、ファイルを開くことができない場合でも、実行を続行します。失敗したら正常に終了する必要があります。

+2

'char c;'を 'int c;'に変更します。これは 'getc()'によって返され、 'putc()'で必要とされる型です。 –

+0

@WeatherVane True。更新しました。 –

+0

@AjeyaSiddharthaの値は ''\ n' 'でもint型です。 –

関連する問題