天国にいけるC言語入門 ヘキサ構造体 ver5.2130
読み込みオープンモード"r"の代わりに新規書き込みオープンモード "w" をつかっても ハードディスク内のファイルに保存したデータをコマンドプロンプト画面に表示することはできません
ハードディスク内のファイルにデータを保存する場合もハードディスク内のファイルを利用する場合も、そのシステムは機能しています
読み込みオープンモード"r"の代わりに新規書き込みオープンモード "w" をつかっても ハードディスク内のファイルに保存したデータをコマンドプロンプト画面に表示することはできません
ソーラー「
オープンモード"w"では
ハードディスク内のファイルに新規書き込みできるけど
ハードディスク内のファイルに保存されたデータを
fscanf関数をつかって
用意した配列に読み込みできない
そのことを実際にためしてみよっかな(*´▽`*)
つまり
オープンモード"w"をつかって
ハードディスク内のファイルを開き
fscanf関数をつかって
ハードディスク内のファイルに保存されているデータを
メモリに格納した後
そのメモリに格納されたデータを
用意した配列の配列変数に読み込み
printf関数を使って
配列変数に格納された数値データを
コマンドプロンプト画面に表示できるかどうか
試してみればいいわけだね」
🌼 🌼 🌼
さあ、ソーラーさん 今度はどうなるかな?
🌻 🌻 🌻
ソーラー
「実はオープンモード"w"をつかってハードディスク内の
ファイルを開くとファイルが初期化されて
以前にファイルに保存されていたデータは消え
ファイルに何もデータが入ってない状態になるんだよね~
だから
結局
データをよみこむことはできないんだなぁ
これが
でも
コンパイルしたらどのような結果がでるかは
わからないね
🌻 🌼 🌻 🌼 🌻
そう・・・そう・・・
試しちゃえ!
🌻 🌼
ソーラー「そこで
オープンモード "w" をつかって以前にハードディスクのファイルに保存されていたデータを
読み込みできるか
となるわけですが
そのことを確かめてみるには
まずは準備段階として
ハードディスク内のファイルに何かデータを保存しないとね。
では
まず最初に
またまた恒例の
オープンモード"w"をつかって
TEN-GOGO-C-language.txtファイルに
数値
1
2
3
4
5
を
保存します
そのプログラムは次の通り
#pragma warning(disable: 4996)
#include <stdio.h>
int main (void){
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","w");
if(fp==NULL){
printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
else printf("Hello!ファイルオープンに成功しましたよ~ん\n");
fprintf(fp,"%d\n",1);
fprintf(fp,"%d\n",2);
fprintf(fp,"%d\n",3);
fprintf(fp,"%d\n",4);
fprintf(fp,"%d\n",5);
fclose(fp);
return 0;
}
コンパイル結果
EAZY IDECの場合
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
ソーラー「よ~し
またまた
TEN-GOGO-C-language.txtファイルに
数値
1
2
3
4
5
を格納したよ」
🌻
まずは ここからがはじまりだね
🌻
ソーラー「この
TEN-GOGO-C-language.txtファイルに
数値
1
2
3
4
5
が格納された状態を経てから
今度は
オープンモード"w"をつかってファイルを開き
以前保存された
数値
1
2
3
4
5
を
fscanf関数をつかって
用意した配列に取り込み
配列に取り込まれたデータを
printf関数を使って表示することができるか
プログラムを構成して実行してみるよ。
#pragma warning(disable: 4996)
#include <stdio.h>
int main (void){
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","w");
if(fp==NULL){
printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
else printf("Hello!ファイルオープンに成功しましたよ~ん\n");
int hairetu[5];
fscanf(fp,"%d",&hairetu[0]);
fscanf(fp,"%d",&hairetu[1]);
fscanf(fp,"%d",&hairetu[2]);
fscanf(fp,"%d",&hairetu[3]);
fscanf(fp,"%d",&hairetu[4]);
printf("%d\n",hairetu[0]);
printf("%d\n",hairetu[1]);
printf("%d\n",hairetu[2]);
printf("%d\n",hairetu[3]);
printf("%d\n",hairetu[4]);
fclose(fp);
return 0;
}
コンパイル結果
EAZY IDECの場合
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
-858993460
-858993460
-858993460
-858993460
-858993460
(この値はメモリの使用状況によってことなってきます)
ソーラー「
オープンモード"a"のときと同様に
やはり(*^▽^*)
オープンモード"w"では
ハードディスクの
TEN-GOGO-C-language.txtファイルに格納された数値
1
2
3
4
5
をよみこめないか・・・
オープンモード"w"では
ハードディスク内のTEN-GOGO-C-language.txtファイルに
書き込みしかできないよう設定されているため
今のプログラム
👇
#pragma warning(disable: 4996)
#include <stdio.h>
int main (void){
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","a");
if(fp==NULL){
printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
else printf("Hello!ファイルオープンに成功しましたよ~ん\n");
int hairetu[5];
fscanf(fp,"%d",&hairetu[0]);
fscanf(fp,"%d",&hairetu[1]);
fscanf(fp,"%d",&hairetu[2]);
fscanf(fp,"%d",&hairetu[3]);
fscanf(fp,"%d",&hairetu[4]);
printf("%d\n",hairetu[0]);
printf("%d\n",hairetu[1]);
printf("%d\n",hairetu[2]);
printf("%d\n",hairetu[3]);
printf("%d\n",hairetu[4]);
fclose(fp);
return 0;
}
コンパイル結果
EAZY IDECの場合
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
-858993460
-858993460
-858993460
-858993460
-858993460
の中の
fscanf関数を使った命令文
fscanf(fp,"%d",&hairetu[0]);
fscanf(fp,"%d",&hairetu[1]);
fscanf(fp,"%d",&hairetu[2]);
fscanf(fp,"%d",&hairetu[3]);
fscanf(fp,"%d",&hairetu[4]);
は
コンピュータのメモリに
ハードディスク内の
TEN-GOGO-C-language.txtファイルから
データを読み込めない
つまり、機能していないんだね。」
🌻
オープンモード"w"は
ハードディスク内のファイルに保存されているデータの
読み込み機能はなく
ハードディスク内のファイルへ
データの
書き込み機能しかないから やっぱり そうなるかな
🌻
ソーラー
「となると
今のプログラムは
機能していない
fscanf(fp,"%d",&hairetu[0]);
fscanf(fp,"%d",&hairetu[1]);
fscanf(fp,"%d",&hairetu[2]);
fscanf(fp,"%d",&hairetu[3]);
fscanf(fp,"%d",&hairetu[4]);
を取り除いた
以下のプログラムと等しくなり
#pragma warning(disable: 4996)
#include <stdio.h>
int main (void){
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","a");
if(fp==NULL){
printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
else printf("Hello!ファイルオープンに成功しましたよ~ん\n");
int hairetu[5];
printf("%d\n",hairetu[0]);
printf("%d\n",hairetu[1]);
printf("%d\n",hairetu[2]);
printf("%d\n",hairetu[3]);
printf("%d\n",hairetu[4]);
fclose(fp);
return 0;
}
この👆のプログラムをコンパイルすると・・・
🌻
どうなる、どうなる?
🌼
コンパイル結果
EAZYIDECの場合
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
-858993460
-858993460
-858993460
-858993460
-858993460
(これらの値はメモリの使用状況により異なってきます)
ソーラー 「やっぱり同じコンパイル結果
EAZYIDECの場合
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
-858993460
-858993460
-858993460
-858993460
-858993460
がでてきたね
オープンモード"w"でも
オープンモード"a"のときのように
fscanf関数は機能していないんだ
そして
EAZYIDECの場合
9
2
1703760
1964398416
1703808
Visual Studioの場合
-858993460
-858993460
-858993460
-858993460
-858993460
とへんてこな数値がコンパイル結果にでてきたのは
配列宣言
int hairetu[5];
を
行って
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
を
作製したものの
fscanf関数が機能しなかったため
配列の中の
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
TEN-GOGO-C-languageファイルに保存されている
数値データ
1
2
3
4
5
を取り込めなかったためなんだ。
そうなると
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
は
初期化されていないことになるよね
そこで
printf("%d\n",hairetu[0]);
printf("%d\n",hairetu[1]);
printf("%d\n",hairetu[2]);
printf("%d\n",hairetu[3]);
printf("%d\n",hairetu[4]);
が実行された場合
配列変数が初期化されていない場合に
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に格納されている
モンスター数値
(モンスター数値とは変数や配列が初期化されていないときに変数や配列に最初から格納されている数値のことをいいます)
9
2
1703760
1964398416
1703808
がコマンドプロンプト画面に表示されるというわけなんだ・・・
まあ
もともと
🍋オープンモード"w"🍋で
TEN-GOGO-C-languageファイルを開いた場合
TEN-GOGO-C-languageファイルを開いた瞬間に
TEN-GOGO-C-languageファイルに
保存されていた数値
1
2
3
4
5
は
消えてしまうので
たとえ
fscanf関数が機能していたしても
TEN-GOGO-C-languageファイルに
保存されていた数値
1
2
3
4
5
をコマンドプロンプト画面に表示することは
できなかったんだ
となると・・・
fscanf関数が機能していた場合
つまり
ハードディスク内のTEN-GOGO-C-languageファイルに
何もデータがはいっていない空白の状態のとき
fopen関数の設定を
fp=fopen("TEN-GOGO-C-language.txt","r");
のようにオープンモード"r"とし
fscanf関数を使って
ファイルポインタ変数fpの格納しているアドレスのメモリに
その空白の状態を格納し
さらに
その空白の状態を配列に格納し
配列に格納されたデータを
printf関数をつかってprintf出力表示したら
コマンドプロンプト画面には何が表示されるのかな?
っておもっちゃったんだな~~
君はどう思う?」
🌻
何もデータが保存されていないハードディスク内のファイルを
オープンモード"r"で開き
fscanf関数を使ってデータを読み込み
コマンドプロンプト画面にそのデータを表示してみたら
何が表示されるのか?
それはおもしろそうなアイデアだね。
どうなるのかな?
🌼 🌼 🌼
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます