2016-08-01 8 views
0

私はC言語を初めて使っています。私はCで作成した単純なテキストファイルを読み込もうとしています。このファイルは、新規→空のファイル→保存(.txt)を追加すると、テキストファイルにサンプルのスコーキボードが保存され、完全なファイル名はsudokuchar.txtになります。私が作成したテキストファイルからの読み方

私は、ファイルから読み込んで印刷する必要があり、コード、それは次のとおりです。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *fpointer = fopen("sudokuchar.txt", "r"); 
    char input[100]; 
    while(fgets(input,100,fpointer)) 
    { 
     printf("%s",input); 
    } 
    fclose(fpointer); 
} 

ので、私は何もしてリターンを-1に印刷されないプログラムをコンパイルするとき。私は何かが私がから読もうとしているファイルに間違っていると仮定??もし何かが大いに感謝されるのを助けることができれば。

+1

"私が望む場所" - 実行しているプロセスのアクティブな作業ディレクトリでない限り、投稿されたコードはファイルを見つけることができず、 'fopen'はNULLを返します。それをチェックするのに失敗し、むしろ正しく動作したと仮定して、 'fgets'へのファイルポインタとしてNULLを渡し、*未定義の動作*を呼び出します。いくつかのエラーチェックとランタイムスタートアップの設定の変更が順調に見えるでしょう。 – WhozCraig

+0

ファイルをアクティブな作業ディレクトリに保存するにはどうすればよいですか? – katDouglas

+0

'main()'は 'int'型の関数であり、終了時にシェルにゼロまたは正の* 8ビット*値を返さなければならないことに注意してください(例えば' return 0;エラー時には「255」)。また、 'main'の適切な宣言は、' int main(void){... 'または' int main(int argc、char * argv []){... ' ** argv [] 'の代わりに' 'argv''を使用し、いくつかのコンパイラで受け入れられる追加の移植不可能な引数があります)。これは読み取りの失敗を引き起こしていません( 'fopen'の失敗はおそらくそうです)が、基本を正しくすることが役に立ちます。 –

答えて

1

fopenと他の標準ライブラリ呼び出しの戻り値を常にチェックします。あなたのファイルが存在しない可能性が最も高いです。あなたはerrnoを使用して素敵なユーザーフレンドリなエラーメッセージを作ることができます。ちょうどerrno.hをインクルードしてください。全体的には、コードは正常に動作するはずですが、ファイルが見つからない場合はfopenreturns NULLが返されますので、戻り値を確認する必要があります。

FILE *fpointer = fopen("sudokuchar.txt", "r"); 

if(fpointer == NULL) { 
    fprintf(stderr, "Error: [Errno %d]: %s\n", 
      errno, strerror(errno)); 
    return 1; 
} 
+0

ありがとう、私はこれを追加しました – katDouglas

0

どのファイルポインタが返されるかを確認することをお勧めします。ファイルポインタが0またはNULLを返した場合、ファイルポインタは指定したファイル名を指すことができません。また、あなたはこの

File *fp = fopen(file name with full path (i.e. /home/chex/read.txt),"r") 

チェックman fopen FILEの*ののfopen(定数のchar *のパス、constのchar型*モード)を使用することができます。

関連する問題