2016-11-13 24 views
1

これが印刷されない理由を理解しようとしていますが、コマンドプロンプトから入力されたテキストファイルから各文字を印刷しようとしていますが、私は間違って何をしていますか?なぜこれはうまくいかないのですか?私はこれが論理的にうまくいくように感じます。ありがとう。テキストが出力に出力されていない

int main(int argc, char *argv[]) { 
    FILE *fp; 
    int i; 
    for (i = 1; i < argc; i++) { 
     printf("%s\n", argv[i]); 
     fp = fopen(argv[i], "r"); 
     while (!feof(fp)) { 
      puts(fp); 
     } 
     fclose(fp); 
    }  
    return 0; 
} 
+1

はとにかくhttp://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong –

+1

を参照してください。 - 'fp'は読み込み用ですので、' puts'は意味を持ちません。 –

+0

あなたはどんなファイルからも読みません。puts(fp)はナンセンスです。ファイルポインタです。最初に 'fopen'の' fp'結果が 'NULL'でないことを確認してください。その後、ファイルから読み込みます。しかし、まだ読んだところはどこにもありません。 –

答えて

1

あなたはファイルポインタを印刷しようとしている。

puts(fp); 

は、それが必要なものではありません - つまりputs()の取扱説明書をお読みください。

文字ごとのcharを読み込み、標準出力に印刷するには、あなたが行うことができます:

int ch; 
fp = fopen(argv[i], "r"); 
if (!fp) { 
    perror("fopen"); 
    exit(1); 
} 
while((ch=fgetc(fp)) != EOF) { 
    putchar(ch); 
} 
flcose(fp); 

あなたは引数として複数のファイル名を渡している場合を除き、あなたの外側のループはあまり意味がありません。

+0

ああ、それは完全に感謝する、ありがとう。私は、ファイルポインターをcharポインターと混同していたと思います。私はまだ違いが混乱しています:ファイルポインタがファイルの最初の文字を指している場合、それは文字ポインタも何ですか? – Submersed24

+0

また、あなたは 'while(!feof(fp))'が知っていることを知るために[this](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong)ほとんどのユースケースであなたが望むもの。 –

+0

私は何も言わなかったし、出力もない、はい、複数のファイルの単語頻度をテストしています。 – Submersed24

1

あなたのプログラムは、複数の問題があります。

  • あなたはfopen()の戻り値をテストしていません:コマンドライン引数のいずれかが読み取りのためのストリームとして開くことができない場合、プログラムは未定義の動作を呼び出します。

  • while(!feof(fp))が間違っています。これを読む:fpFILE *、ない文字列であるようWhy is “while (!feof (file))” always wrong?

  • puts(fp);が正しくありません。ループを使用して、一度に1バイトずつファイルの内容をコピーします。ここで

が修正バージョンです:

#include <errno.h> 
#include <stdio.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
    FILE *fp; 
    int i, c; 

    for (i = 1; i < argc; i++) { 
     fp = fopen(argv[i], "r"); 
     if (fp == NULL) { 
      fprintf(stderr, "cannot open %s: %s\n", argv[i], strerror(errno)); 
     } else { 
      printf("%s\n", argv[i]); 
      while ((c = getc(fp)) != EOF) { 
       putchar(c); 
      } 
      fclose(fp); 
     } 
    }  
    return 0; 
} 
0
int main(int argc, char *argv[]) { 
    FILE *fp; 
    int i; 
    char buff[128]; 
    for (i = 1; i < argc; i++) { 
     printf("\n%s\n", argv[i]); 
     if(NULL == (fp = fopen(argv[i], "r"))){//check open file 
      perror("fopen"); 
      continue; 
     } 
     while (fgets(buff, sizeof buff, fp)) {//read into buffer 
      fputs(buff, stdout);//print buffer (not add newline) 
     } 
     fclose(fp); 
    }  
    return 0; 
} 
関連する問題