天国にいけるC言語入門 ヘキサ構造体 ver5.2130
読み取りオープンモード"r"の代わりに追加書き込みオープンモード "a" をつかっても ハードディスク内のファイルに保存したデータをコマンドプロンプト画面に表示することはできません
ユーザーから渡されたデータはまずコンピュータのメモリに保存されるのはコンピュータの基本的なシステムでした
読み取りオープンモード"r"の代わりに追加書き込みオープンモード "a" をつかっても ハードディスク内のファイルに保存したデータをコマンドプロンプト画面に表示することはできません
ソーラー「
オープンモード "r"でファイルを開かなければ
ハードディスク内のファイルに保存されたデータを
ファイルポインタ変数fpが格納しているアドレスのメモリに
呼び出して格納し
さらに
そのデータを
fscanf関数を使って配列にとりこみ
さらに
配列に取り込まれたデータを
printf関数をつかって
コマンドプロンプト画面に表示できないのかな・・・」
🌻
ははは
どうなってるのかな
🌼
ソーラー「
オープンモード"r"
の代わりに
オープンモード"a"
や
オープンモード"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!ファイルオープンに成功しましたよ~ん
ソーラー「よ~し これで準備OK!
まずは
TEN-GOGO-C-language.txtファイルに
数値
1
2
3
4
5
を格納したよ」
🌻
そう その調子
🌻
ソーラー「このように
ハードディスク内のTEN-GOGO-C-language.txtファイルに
数値
1
2
3
4
5
が格納された状態で
まず
オープンモード"a"をつかって
数値
1
2
3
4
5
を
コマンドプロンプト画面に表示できるか試してみるよ
そのプログラムはつぎのようになるかな。
#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の場合
-858993460
-858993460
-858993460
-858993460
-858993460
ソーラー「
数値データ
1
2
3
4
5
を表示できてないね
ははあ
もともと
オープンモード"a"では
ハードディスク内の
TEN-GOGO-C-language.txtファイルに格納された数値データ
1
2
3
4
5
を
コンピュータのメモリに格納できなかったんだね
そして
そのかわりにコマンドプロンプト画面に表示された数値
9
2
1703760
1964398416
1703808
これはなんなのかな?」
🌻
ねえ ソーラーさん
🌻
ソーラー「はい、なんでしょうか🐭」
🌻
オープンモード"a"では
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]);
が実行されても
ハードディスク内のファイルに格納された数値データ
1
2
3
4
5
が
コンピュータのメモリに集められていないので
今のプログラム内の
#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;
}
コンパイル結果
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
の中の
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]);
は
ファイルポインタ変数fpが格納しているアドレスのメモリから
数値をデータを読み込めない
つまり
機能していないんじゃな~い?
となると
今のプログラムは
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("Hallo!ファイルオープンに成功しましたよ~ん\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;
}
ソーラー「あっ そういや そうだよね~
では
👆
今のこのプログラムをコンパイルすると・・・
👇
#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;
}
コンパイル結果
EAZY IDECの場合
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
-858993460
-858993460
-858993460
-858993460
-858993460
🌻
どう? ソーラーさん?
🌻
ソーラー 「
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]);
を取り除いていないプログラム
取り除いたプログラムの
どちらも
同じコンパイル結果
EAZY IDECの場合
Hello!ファイルオープンに成功しましたよ~ん
9
2
1703760
1964398416
1703808
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
-858993460
-858993460
-858993460
-858993460
-858993460
がでてきたね
まちがいないね
オープンモード"a"では
ハードディスク内に保存されているデータを
fscanf関数を使ってコンピュータのメモリに
格納することができないんだね。
つまり
fscanf関数が機能していないんだ。
だから
コンパイル後
コマンドプロンプト画面に
9
2
1703760
1964398416
1703808
とへんてこな数値が表示されたのはなぜかというと
fscanf関数が機能しなかったため
int hairetu[5];
と配列宣言され
作製された
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
に
1
2
3
4
5
と
データが格納されることはないよね
つまり
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
は
初期化されていないことになり
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
hairetu[3]
hairetu[4]
には
初期化される前に最初から格納されている
モンスター数値
(モンスター数値とは変数や配列が初期化されていないときに変数や配列に最初から格納されている数値のことをいいます)
EAZY IDECの場合
9
2
1703760
1964398416
1703808
Visual Studioの場合
-858993460
-858993460
-858993460
-858993460
-858993460
が格納されているというわけなのさぁ
だから
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]);
を行うと
EAZY IDECの場合
9
2
1703760
1964398416
1703808
Visual Studioの場合
-858993460
-858993460
-858993460
-858993460
-858993460
が
表示されたというわけなんだ
🌻 🌻
やったね ソーラーさん
🌼
ソーラー「この結果を見ても分かるように
オープンモード "r" の代わりに
オープンモード "a" をつかっても
ハードディスク内のファイルに保存したデータを
コマンドプロンプト画面に表示することはできないねえ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます