

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);
}
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!
・以上。おわり。
No.3
- 回答日時:
たぶんですが、filename1[20];となっているので
ファイルのURLが19文字までしか認識できないんではないでしょうか?
インデックスの0-18の19文字
インデックスの19は確か\0が入るんでしたっけ?
No.2
- 回答日時:
> これは、自分が持っているファイルを打てばよいのですか?
それでOKです。
ただし、ファイル名のみ打ち込んだ場合、プログラムは自分の見ているフォルダにあるファイルを覗いてみて、そんなの無いってエラーを返しているのかと。
hoge.txt
↓
c:\temp\hoge.txt
などと、ファイルを右クリック-[プロパティ]の「場所」を明示して指定すると良いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログボックスで複数フォ...
-
Cでexcelを読込み
-
C言語初心者の質問失礼します。
-
iniファイルをexeファイルと同...
-
csvファイルを開かずに文字を検...
-
VBに、Cのincludeのようなもの...
-
テキスト書き換えのプログラム
-
C言語・ファイルから読み込んだ...
-
分割コンパイルの#defineについて
-
このプログラムの解説を
-
ログ転送フラグに関して
-
libtiffのLoadTIFFinDIB()の返...
-
DLLについて
-
C++書式について
-
Message ID の確認方法
-
javaで例外エラーが発生した際...
-
ファイルへ書込み
-
VBSでファイルを開く
-
VBAでのテキストファイルに対す...
-
DVD動画のFlashへの取り込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
VB.NETによるプロセス間通信
-
VBAにてEXCEL以外のファイル(テ...
-
分割コンパイルの#defineについて
-
ファイルの結合
-
iniファイルに追記がしたいです。
-
VBに、Cのincludeのようなもの...
-
動画処理のライブラリについて
-
Cでのネットワークファイルの読...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
おすすめ情報