2017-12-04 13 views
-2

私のプログラムを実行すると、画面は "ファイル"というファイルを開くことができません。私は講義ノートのガイドラインと方法論に従いましたが、なぜそれが開かないのか理解できません。どんな種類の助けでも大歓迎です。私のファイルは開かれていないのですが、どうすれば修正できますか?

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

#define READONLY "r" 

int main (void) 
{ 
    FILE *ipfile; 
    char filename[FILENAME_MAX+1]; 
    int *unsorted_details; 
    int elements; 

    printf("Enter the name of the input file:\n"); 
    scanf("%s", filename); 

    if((ipfile=fopen(filename, READONLY)) == NULL){ 
    fprintf(stderr, "Couldn't open %s. \n", filename); 
    exit(EXIT_FAILURE); 
    } 
    if (fscanf(ipfile, "%d", &elements) != 1){ 
    fprintf(stderr, "Couldn't read object details from %s\n", 
filename); 
    exit(EXIT_FAILURE); 
    } 
    if ((unsorted_details=(int *)malloc(elements * sizeof(int))) == NULL){ 
    fprintf(stderr, "Failed to allocate memory.\n"); 
    exit (EXIT_FAILURE); 
    } 
    /* Reading elements from file into unsorted array*/ 
    int i; 
    for (i=0; i<elements; i++){ 
    if(!fscanf(ipfile, "%d", &unsorted_details[i])){ 
     fprintf(stderr, "Error reading element %d of the list\n", i+1); 
     exit (EXIT_FAILURE); 
    } 

    } 
    fclose(ipfile); 
    free(unsorted_details); 
    return (EXIT_SUCCESS); 
} 
+2

ファイルが現在のディレクトリに存在しない可能性があります。 –

+0

申し訳ありませんが、私はあなたがファイルディレクトリを意味するか分からない、どうすればこれを修正できますか? –

+1

ファイルをexeファイルを含む同じディレクトリに置き、入力を与えている間もファイルの拡張子を付けます。一度試してください。 – Kishor

答えて

1

ほとんどのライブラリ関数は、これらの機能の一つが失敗し、失敗の理由を示しているときに設定されてerrnoと呼ばれる外部変数を利用します。

あなたがいずれかのエラーメッセージのテキスト記述を取得perrorを呼び出すことにより、stderrにエラーメッセージを出力している、またはあなたが後で自分自身の中に置くことができ、エラーメッセージを指すchar *を返すstrerror(errno)を呼び出すことができますすることができますエラーメッセージ。 fopenに失敗したコールの場合

は、次のように自分のエラーメッセージを変更します。

fprintf(stderr, "Couldn't open %s: %s \n", filename, strerror(errno)); 

はあなたの他のエラーメッセージに同様の変更を行うことができます。一旦これを行うと、その機能が失敗した理由を知り、適切な処置をとることになります。

関連する問題