ファイルに文字列データを1文字ずつ書き込んで保存しファイルを閉じたのち 再びファイルを開きファイルに格納された文字列データを1文字ずつコマンドプロンプトに表示してみよう

ソーラー「そうだ


慣れるために


試しに


ファイルに文字列データを1文字ずつ書き込んで


保存し


ファイルを閉じたのち


再びファイルを開き


ファイルに格納された文字列データを1文字ずつ


コマンドプロンプト画面に表示してみようかな」



🌻  🌻  🌻



いいことじゃない😊


ファイルに文字列データを1文字ずつ書き込んで


ファイルに格納された文字列データを1文字ずつ


コマンドプロンプト画面に表示するのね


かわいいな


🌼  🌼  🌼



ソーラー「"TEN-GOGO-C-language.txt"という名前のファイルを作製して



"TEN-GOGO-C-language.txt"ファイルに


文字列データ


"apple"



1文字ずつ書き込んでみるね


文字列データ


"apple"



文字データ


'a'

'p'

'p'

'l'

'e'

'\0'

で成り立っているから


"TEN-GOGO-C-language.txt"ファイルに


文字データ


'a'

'p'

'p'

'l'

'e'

'\0'



書き込むことになるね


そのあとファイルを閉じ


再びファイルを開いて


コマンドプロンプト画面に


文字データ


'a'

'p'

'p'

'l'

'e'

'\0'



1文字ずつ


表示してみるね」


そのプログラムはこちらです

👇


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



char a[6] = "apple";//🌞まずはchar型の配列aに文字列データ"apple"を代入します


int i;


for(i = 0; i < 6; i++) {


fputc(a[i], fp);//🌞文字データ"apple"を1文字づつ"TEN-GOGO-C-language.txt"ファイルに書き込みます


}


fclose(fp);//🌞1度ファイルを閉じ新規書き込みモード"w"を終了します そうしなければ 読み取りモード"r"でファイルを開くことはできません


fp= fopen("TEN-GOGO-C-language.txt", "r");//🌞ファイルを開きます


int b;


for(i = 0; i < 6; i++) {


b = fgetc(fp);


printf("%c", b);//🌞a p p l eを1文字ずつコマンドプロンプト画面に表示しています


}


fclose(fp);


return 0;


}


プログラムの実行結果


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

apple

C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 23272) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...




🌻  🌻  🌻



きれいに


apple


が表示されたね


🌼  🌼  🌼


ソーラー「このプログラムでは


"TEN-GOGO-C-language.txt"ファイルを作製した後


まず


char a[6] = "apple";


の実行により


char型の配列aの配列変数


a[0]

a[1]

a[2]

a[3]

a[4]

a[5]



文字データ


'a'

'p'

'p'

'l'

'e'

'\0'


が格納されています



コンピュータのメモリに


文字列データ "apple"が格納されているんだね



まだ

"TEN-GOGO-C-language.txt"ファイルに


文字データ


'a'

'p'

'p'

'l'

'e'

'\0'


は保存されていないね


このあと


for(i = 0; i < 6; i++) {


fputc(a[i], fp);//🌞文字データ"apple"を1文字づつ"TEN-GOGO-C-language.txt"ファイルに書き込みます


}


の実行により


fputc(a[0], fp);

fputc(a[1], fp);

fputc(a[2], fp);

fputc(a[3], fp);

fputc(a[4], fp);

fputc(a[5], fp);


が実行されて


文字データ


'a'

'p'

'p'

'l'

'e'

'\0'



"TEN-GOGO-C-language.txt"ファイルに書き込まれていくんだよ



'a'はa

'p'はp

'p'はp

'l'はl

'e'はe

'\0'は空白として


"TEN-GOGO-C-language.txt"ファイルに書き込まれていくことになります


fputc(a[0], fp);

fputc(a[1], fp);

fputc(a[2], fp);

fputc(a[3], fp);

fputc(a[4], fp);

fputc(a[5], fp);


が実行されると


char型の配列aの配列変数


a[0]

a[1]

a[2]

a[3]

a[4]

a[5]


格納されている文字データ


'a'

'p'

'p'

'l'

'e'

'\0'



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



格納し直されてから



"TEN-GOGO-C-language.txt"ファイルに書き込まれていくことになるんだよ


ここで


fclose(fp);


を実行して


"TEN-GOGO-C-language.txt"を閉じ新規書き込みモード"w"を終了します


一度


"TEN-GOGO-C-language.txt"を閉じなければ


新規書き込みモード"w"の状態が続くからなんだ


その状態では


読み取りモード"r"でファイルを開くことができず


"TEN-GOGO-C-language.txt"ファイルに保存された


文字データ


'a'

'p'

'p'

'l'

'e'

'\0



読み取ることはできないってわけだね


そして


fclose(fp);


を実行して


"TEN-GOGO-C-language.txt"ファイルを閉じたあと



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



を実行して


オープンモード"r"



"TEN-GOGO-C-language.txt"ファイルを開きます


これで


"TEN-GOGO-C-language.txt"ファイルに保存された


文字データ


'a'

'p'

'p'

'l'

'e'

'\0



読み取ることができるようになるんだね



次は


int b;


for(i = 0; i < 6; i++) {


b = fgetc(fp);


printf("%c", b);//🌞appleを1文字ずつコマンドプロンプト画面に表示しています


}


の実行だね



for(i = 0; i < 6; i++) {


b = fgetc(fp);


printf("%c", b);//🌞appleを1文字ずつコマンドプロンプト画面に表示しています


}



難しそうにみえるけど


単に


b = fgetc(fp);

printf("%c", b);



6回


b = fgetc(fp);

printf("%c", b);


b = fgetc(fp);

printf("%c", b);


b = fgetc(fp);

printf("%c", b);


b = fgetc(fp);

printf("%c", b);


b = fgetc(fp);

printf("%c", b);


b = fgetc(fp);

printf("%c", b);


実行されるだけなんだよ


ところで


for(i = 0; i < 6; i++) {


b = fgetc(fp);


printf("%c", b);//🌞appleを1文字ずつコマンドプロンプト画面に表示しています


}


の実行の前に


int b;


によって


int型の変数bが


作製されています


ここがちょっとしたポイントかな


int型の変数bは整数値を格納することができます



なぜ


int型の変数bを作製したのかというと


文字データ


'a'

'p'

'p'

'l'

'e'

'\0


の画像データにつけられた数値(アスキーコード)



int型の変数bに格納するためなんだ


b = fgetc(fp);



fgetc(fp)


"TEN-GOGO-C-language.txt"ファイルに保存された


文字データ


'a'

'p'

'p'

'l'

'e'

'\0


につけられた数値(アスキーコード)を戻り値として持つことになるんだ


となると


int型の変数bに


文字データ


'a'

'p'

'p'

'l'

'e'

'\0


につけられた数値(アスキーコード)が


格納されることになるね


printf("%c", b);



数値データを格納している変数bに


%cを作用させるという面白い仕組みになっているね


これは間違いではないよ




文字データ


'a'

'p'

'p'

'l'

'e'

'\0


につけられた数値(アスキーコード)を格納している変数bに


%cを作用させる


printf("%c", b);


を実行すると


a

p

p

l

e

(空白)

コマンドプロンプト画面に表示されることになります



b = fgetc(fp);

printf("%c", b);


1回実行されるごとに


コマンドプロンプト画面に

1文字ずつ

a

p

p

l

e

(空白)



表示されることになるんだけど


改行の設定をしていないので


コマンドプロンプト画面に


a

p

p

l

e

(空白)

横に並んだ


apple(空白)


が表示されるんだよ」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る