天国にいけるC言語入門 ヘキサ構造体 ver5.2130
ファイルに文字列データを1文字ずつ書き込んで保存しファイルを閉じたのち 再びファイルを開きファイルに格納された文字列データを1文字ずつコマンドプロンプトに表示してみよう
ファイルに文字列データを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(空白)
が表示されるんだよ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます