• ベストアンサー

このプログラムの解説を

C言語の勉強を始めたのですが、質問があります。 下のプログラムをコンパイルしたら   入力ファイル名= と出ますが、これは何を入力すればよいのでしょうか? 何か入力しても「~がオープンできません」と表示されて、これは、自分が持っているファイルを打てばよいのですか?(このプログラム自体も何を意味しているか、まだ理解できていません。) 解説よろしくお願いします。 #include<stdio.h> #include<stdlib.h> main() { FILE *fin; char buf[256]; char filename1[20]; printf("入力ファイル名="); gets(filename1); fin=fopen(filename1,"r"); if(fin==NULL){ printf("%sがオープンできません.\n",filename1); exit(1); } while(fgets(buf,256,fin) !=NULL){ printf("%s",buf); } fclose(fin); }

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★解説 (1)宣言…これから使う変数を宣言します。  『FILE *fin;』はファイル型の変数をこれから使うよ。  『char buf[256];』は読み込み領域の変数を使うよ。  『char filename1[20];』はファイル名領域の変数を使うよ。って事。 (2)表示と入力  『printf("入力ファイル名=");』で入力前にメッセージを表示。  『gets(filename1);』でファイル名を入力します。←質問者さんが入力。 ※ファイル名を入力して『Enter』キーが押されると『filename1』という領域にファイル名が  格納されます。 (3)開く処理  『fin = fopen(filename1,"r");』でファイル操作を開始すべく『開く』処理をします。 ※ファイル操作は、『開く』、『読み書き』、『閉じる』の3ステップが基本です。  これは、その最初の処理です。→『開く処理』が出来なければ『fin』には『NULL』をセット。 (4)チェック  『if (fin==NULL){』  『 printf("%sがオープンできません.\n",filename1);』  『 exit(1);』  『}』 ※(3)より、『fin』に『NULL』がセットされたならば、(2)で入力されたファイルが存在したいため  『printf』関数でそのメッセージを表示します。 ※また、『exit(1);』関数で OS(Windows) などにエラーが起きたことを返して終了します。値(1)を返す。 (5)繰り返し読み書き  『while(fgets(buf,256,fin)!=NULL){』←1行ずつファイル内容を読み込む。  『 printf("%s",buf);』←1行ずつ読み取った内容を表示する。  『}』 ※上記の右コメントより、ファイル内容から1行データを読み込んでは、1行ずつその内容を  『printf』関数で出力して表示します。 ※ファイルの最後に到達すると『fgets』関数は『NULL』を返します。 ※注意。『fgets』関数はエラーなどが起きても『NULL』を返します。→feof、ferror関数で判定 (6)閉じる  『fclose(fin);』でファイル操作を終了すべく『閉じる』処理をします。 ※上記の(3)でファイル操作を『開く』オープンしているので、最後は『閉じる』クローズします。 ※これを記述しないとファイル操作で何かデータを書き込んだとき、ファイルへデータ内容が反映されません。  ただし、プログラムを終了した時点で『自動的』に開かれたファイル操作を『閉じる』処理しますが…。  安全のため(習慣のため)にも記述しましょう。 最後に: ・『解説』のとおり、このプログラムはユーザへ『ファイル名の入力』をしてもらって、  そのファイルをオープン『開く』します。 ・その後、1行ずつファイル内容を読み込んでは、1行ずつそのデータを画面へ出力しています。 ・最後に、ファイル処理をクローズ『閉じる』します。 ・なお、存在するファイルを入力しない限りは、すべて『~がオープンできません.』って表示されますよ。 ・よって、必ず存在するであろう『C:\BOOT.INI』と入力すると内容が表示されますよ。  なお、このファイルはとても重要なファイルですので削除はしないように。→見るだけなら OK! ・以上。おわり。

choobn
質問者

お礼

ありがとうございました。

その他の回答 (3)

回答No.3

たぶんですが、filename1[20];となっているので ファイルのURLが19文字までしか認識できないんではないでしょうか? インデックスの0-18の19文字 インデックスの19は確か\0が入るんでしたっけ?

choobn
質問者

お礼

なんとかできました。 ありがとうございました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> これは、自分が持っているファイルを打てばよいのですか? それでOKです。 ただし、ファイル名のみ打ち込んだ場合、プログラムは自分の見ているフォルダにあるファイルを覗いてみて、そんなの無いってエラーを返しているのかと。 hoge.txt ↓ c:\temp\hoge.txt などと、ファイルを右クリック-[プロパティ]の「場所」を明示して指定すると良いです。

choobn
質問者

お礼

何とかできました。 回答ありがとうございました。

choobn
質問者

補足

場所も入力してみたのですが、表示は同じでした。 他に、何か問題はないでしょうか?

noname#39970
noname#39970
回答No.1

指定したファイル(テキスト)の内容を表示するプログラムだと思われる。

関連するQ&A