2017-02-06 13 views
0

こんばんはを慰めるために、ファイルや印刷からの読み取り、Cプログラミング:

私は取捨選択されている同様の質問が、あります知っているが、この特定の問題が一意であるように思われます。

テキストファイルを文字列に読み込んで標準出力に書き込む方法を理解しようとしています。私はこのコードを試しましたが、puts()を呼び出すとコンソールに何も起こりません。 file.txtは "hello"と書かれていますが、最後のif文はテスト条件に達していないため何らかの理由で動作していないようです。これをどうすれば機能させることができますか?

これは、オンラインの多くの、多くの例で与えられたコード、わずかに変更されました:あなたは、ファイルを作成した後

#include <stdio.h> 

int main() 
{ 
    FILE *fp; 
    char str[60]; 

    fp = fopen("file.txt","w+"); 
    fprintf(fp,"%s","hello"); 
    if(fp==NULL){ 
     perror("Error opening file"); 
     return(-1); 
    } 
    if (fgets (str, 60, fp)!=NULL) 
     puts(str); 
     printf("%s","test"); 
    fclose(fp); 
return 0; 
} 
+0

プログラムの最後に 'printf(" \ n ")'を追加してみてください。 – Rohan

+0

コードをステップ実行したときにデバッガからあなたに通知されるのは何ですか? –

答えて

0

fgets()に電話するまでに、ファイルポインタはすでにファイルの末尾にあります。 fgets()の前にrewind(fp)に電話をかけてください。

また、ファイルを開くときに、の呼び出しの前に、fp==NULLのチェックを入れてください。

+0

ああ、素晴らしい解決策もあります。ありがとうございます –

+0

これは、OPが '' w + "'モードでファイルを開いたことを認めている唯一の回答であり、 'if(fp == NULL)の誤った配置についての唯一の回答です)... ' –

0

、あなたはfpfclose()fopen()に読み取り用のファイルを再する必要があります。

+1

Omgありがとうございます。愚かな時間のためにこれで行った。<とてもばかげて、それは簡単だった。私は "w +"は私に読み書きを許可すると思っていましたが、あなたが言ったことを正確にしなければならないようです.foose(file.txt、r) –

0

ファイルから読み込んでコンソールに印刷する最も簡単な方法があります。 freopen()関数を使用してファイルを開き、基本STD I/Oを使用してファイルを読み込みます。

私の方法でソリューションを書き直します。

#include <stdio.h> 

int main() 
{ 
    char str[60]; 
    FILE* x = freopen("file.txt","r",stdin); 
    if(x==NULL){ 
     printf("Error opening file"); 
     return(-1); 
    } 
    while(fgets (str, 60,stdin)){ 
     puts(str); 
    } 
    return 0; 
} 
+0

['gets()'は使わないでください](http://stackoverflow.com/questions/1694036/why-is-the-gets-function-so-dangerous-that-it-should -not-be-used)である。 C99では廃止され、現在のC標準であるC11から完全に削除されました。 OPはこの機能を使用しませんでした。なぜあなたはこれに変わりますか? OPのように、代わりに 'fgets()'を使用してください。また、ファイルが以前に開かれていないため、 'freopen()'の使用目的は不明です。 OPのコードが最初にファイルを開き、それにデータを書きました。 OPは '' w + ''を使うので、最も簡単な解決策はファイルを読む前に' rewind(fp) 'を使うことです。 –

+0

お返事ありがとうございます。私はfgets()を編集して使用しました。彼は「文字列をテキストファイルに読み込んで標準出力に書き込む方法を見つけようとしています」と述べました。だから、私はfreopen()をすでに使用していました。もし私が間違っていたら、ごめんなさい。 –

+0

単に 'fp = fopen(" file.txt "、" r ")'を使って既存のファイルを読み込み、 'freopen()'を使う必要はありません。また、 'stdin'をリダイレクトして、' x'にエイリアスして、私を逃れさせる理由もあります。 OPの_code_が行うことを行うコードを修正した場合、つまり、新しいファイルを開き、そのファイルに書き込んだり、その内容を読み込んだりすると、どこに問題があるのか​​がわかります。 –