ファイルにデータがなにも保存されてない状態でオープンモード"r"でファイルをひらきデータを読み取りprintf表示したなら どのようなデータがコマンドプロンプト画面に表示されるでしょうか


ソーラー

ファイルになにもデータが保存されていない空白の状態で


    

        🍊オープンモード"r"を設定し🍊



fscanf関数を使用可能状態にしてから


fscanf関数を使って空白の状態を配列に格納し


配列内のデータをprintf出力表示したら


コマンドプロンプト画面には何が表示されるのかな?」


🌻 🌻

この部分は


ハードディスク内のTEN-GOGO-C-language.txtファイルに


何もデータが保存されていない空白の状態のとき


ファイルポインタ変数宣言とfopen関数の設定で


FILE *fp;

fp=fopen("TEN-GOGO-C-language.txt","r");


のように


      🍊オープンモード"r"を設定し🍊



🍊オープンモード"r"により使用可能となったfscanf関数を使って🍊

     

TEN-GOGO-C-language.txtファイルの空白の状態のデータを


ファイルポインタ変数fpが格納している



アドレスのメモリに格納したあと


用意した配列に


ファイルポインタ変数fpが格納しているアドレスのメモリに


集められた空白の状態のデータを


格納し直し


配列に格納された空白の状態のデータをprintf出力表示したら


コマンドプロンプト画面には何が表示されるのかな?


ともいえるのかな


🌻 🌻


ソーラー「そう、そうなんです


fscanf関数を使って


ファイルポインタ変数fpが格納しているアドレスのメモリに


格納されたハードディスク内の


TEN-GOGO-C-language.txtファイルのデータは


配列に格納しなおさないと


そのデータをとりあつかえないんだ


🌞🌻


ファイルになにもデータがはいっていない空白の状態で



         🍊オープンモード"r"を設定し🍊



fscanf関数を使用可能状態にしてから


fscanf関数を使って空白の状態を


配列に格納し


配列に格納されたデータをprintf出力表示


させるためには


うふふふ この文章 くりかえされるね😝



まず最初に


ファイルになにもデータがはいっていない空白の状態を


作らないといけないっか? ねえ?

🌻  🌼



ソーラー「それなら 簡単


オープンモード"w"でファイルをオープンしたら


前に格納されたデータはすべて消えてしまうから


ファイルになにもデータがはいっていない空白の状態をつくるには


オープンモード"w"でファイルをオープンするだけでいいんだ


次のプログラムのようにね」


#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");


fclose(fp);

return 0;

}


コンパイル結果


EAZY IDECの場合

Visual Studioの場合


Hello!ファイルオープンに成功しましたよ~ん



  🌞   🌞   


はっ


ふふっ


いつのまにか


ファイルのオープンモードの使い方になれてきたね


感心しちゃった


とにかく これで


ファイルになにもデータが格納されてない状態ができあがったね


😊😊😊



ソーラー

「あはは ほんとだね」



    🌻


あとは


              オープンモード"w"


から


              オープンモード"r"  

    


           🍓オープンモードを変更して🍓




fscanf関数を使用可能状態にし


TEN-GOGO-C-language.txtファイルの空白データを


fscanf関数をつかって


配列に格納して


空白データをコマンドプロンプト画面に


printf出力表示してあげれば


いいだけになるね


そのプログラムはっと・・・


オープンモード"r"にしてっと・・・


こうかな?

👇


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;

fp=fopen("TEN-GOGO-C-language.txt","r");

if(fp==NULL){

printf("ファイルオープンに失敗しましたよ~ん\n");

return -1;}

else printf("Hello!ファイルオープンに成功しましたよ~ん\n");


int hairetu[5];


fscanf(fp,"%d\n",&hairetu[0]);

fscanf(fp,"%d\n",&hairetu[1]);

fscanf(fp,"%d\n",&hairetu[2]);

fscanf(fp,"%d\n",&hairetu[3]);

fscanf(fp,"%d\n",&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関数は配列にとりこめないみたいだね


だから

配列宣言

int hairetu[5];

によって作製された

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

fscanf関数によって取り込まれたデータによって初期化されず


初期化されていないときに


配列変数

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]);


により


コマンドプロンプト画面に表示されたんだね」



  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます