1

私はコンピュータサイエンスの入門コースを受講しています。以下のコードでファイルを開くたびに、inptrがNULLであるかどうかを確認するように教えられてきました。

//open dictionary
FILE* inptr = fopen(dictionary, "r");
if (inptr == NULL)
{
    fprintf(stderr, "Could not open dictionary.\n");
    return false;
}

問題は、私たちがそれについて何をすべきかを教えられていないということです。したがって、コードを実行すると、エラーメッセージが出力され、falseが返されます。問題を解決するにはどうすればよいですか?

4

5 に答える 5

1

dictionary問題を修正するには、「 」という名前のパラメータでファイルへの有効なパスを見つけて指定します。

たとえば、 ""を開こうとしてはどうでしょうか/etc/groups(UNIXマシンで実行していると仮定します)。

または、より正確には:

 FILE* inptr = fopen("/etc/groups", "r");

また

 char * pathToFile = "/etc/groups";
 FILE * inptr = fopen(pathToFile, "r");

追加するために編集:

dictionary「 」はパスを指す変数であると言うので、それを印刷して、それを含むフォルダ/ディレクトリに「cd」できるかどうかを確認します。

例えば:

 printf( "path to my dictionary is %s", dictionary );
 FILE * inptr = fopen(dictionary, "r");
于 2013-03-10T02:42:35.110 に答える
1

エラーを絞り込むには、常に perror() を使用して、オペレーティング システムから返されたエラー コードを解釈します。

 FILE* inptr = fopen(dictionary, "r");
     if (inptr == NULL)
     {
         perror("Could not open dictionary.\n");
         return false;
     }
于 2013-03-10T02:48:25.787 に答える
0

プログラム ファイルと「辞書」ファイルが同じディレクトリにある場合は、 path を指定する必要はありません。それ以外の場合は、ファイル名の完全なパスを指定する必要があります。

For e.g:- if your "dictionary" file is in /home/user_name/Documents then 
          FILE* inptr = fopen("/home/user_name/Documents/dictionary", "r");

また、引用符の下にファイル名を含めます("/home/user_name/Documents/dictionary")

詳細については、これが役立ちます

http://www.cplusplus.com/reference/cstdio/fopen/

于 2013-03-10T02:51:19.980 に答える
0

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

fprintf(stderr, "Could not open dictionary file '%s'.\n", dictionary);

そのため、より有益です。

このエラーを受け取ったら、a) 変数dicationaryが期待どおりのものであることを確認し、b) 変更した場合は、シェルを使用してアクセスできることを確認します (ファイルの所有権/ファイルのアクセス許可など)。

于 2013-03-10T02:51:20.190 に答える
0

この場合、何をすべきかについて「唯一の正解」はありません。それは、コンテキストとデザインに大きく依存します。それはあなたのプログラムが何であるか、そしてそれがどのように動作するかによって異なります。詳細を知らずに質問に答える方法はありません。

たとえば、プログラムがインタラクティブで、渡されたファイル名がfopenユーザーによってインタラクティブに入力された場合、実行可能なアクションは、ファイルを開くことができなかったことをユーザーに伝え、ファイルを再入力するように求めることです。名前。

あなたのプログラムがある種の「バッチ処理」プログラムであり、ある種のユーザーとサプライヤーの構成ファイルからパラメーターを取得する場合、実行可能なアプローチは、意味のあるエラーメッセージでプログラムをすぐに終了することです。つまり、ユーザーに編集を依頼します。 config ファイルを削除して、プログラムを再実行します。

あなたのプログラムが、常に実行されているはずのある種のサーバー プログラムである場合、エラーをログに記録し、そのファイルなしでできる限り最善の作業を継続することを決定できます。

もちろん、それはすべて、そのファイルがプログラムの操作にとってどれほど重要であるかによっても異なります。このファイルが絶対に必要な場合は、致命的なエラーで終了するか、ユーザーに適切なファイル名を尋ね続ける必要があります。

ファイルがオプションの場合は、欠落しているファイルに関する警告を発行し、いくつかの既定の構成や規則 (欠落しているファイルによってオーバーライドされる) を想定して作業を続行できます。

上記は、いくつかの一般的な考慮事項です。プログラム、不足しているファイル、およびその役割について詳しく知らずに、これ以上具体的なことを言うことはできません。

于 2013-03-10T03:06:57.257 に答える