画像(logo)

HOME/[C言語 入門]小学生でもわかるC言語3 目次/四日目 ファイル読み書き(文字列)

広告

[C言語 入門 小学生でもわかるC言語3]
四日目 ファイル読み書き(文字列)

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

目次へ戻る

ファイル読み書き(文字列)

今回は文字列を中心としたファイル読み書きを見ていきたいと思います。

fputs()

/*四日目 プログラム1*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	char str[128] = "good morning!!!";
	FILE *fp;

	fp = fopen("test.txt", "w");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	fputs("月火水木金土日\n",fp);
	fputs(str,fp);

	fclose(fp);
	return 0;
}

「test.txt」

画像(ci_4_1)

まずはシンプルにファイルに内容を書き込む「fputs()」です。

fputs("書き込みたい文字列",ファイルポインタ);

書き込むファイルポインタと文字列を設定するだけでシンプルに書き込みます。

fgets()

/*四日目 プログラム2*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	char str[128];
	char str2[128];
	char str3[128];
	FILE *fp;

	fp = fopen("test.txt", "r");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	fgets(str,128,fp);
	printf("%s\n",str);
	fgets(str2,6,fp);
	printf("%s\n",str2);
	fgets(str3,128,fp);
	printf("%s\n",str3);

	fclose(fp);
	return 0;
}

■実行結果■

画像(ci_4_2)

続いて改行まで指定したバイト分読み込む「fgets()」になります。

前に書き込んだ内容を読み込んでおります。

fgets(読み込み先,指定バイト,ファイルポインタ);

実行結果から見てもわかるようにこの関数は改行までを指定バイト読み込みます。(改行コードも含めて読み込みます!)

なのでどんなに大きな容量を指定しても改行で読み込みは止まります。

ただ、後ほど紹介する「fscanf()」関数で「%s」指定をした時のようにホワイトスペースで読み込みを止めたりしないので例えば

2017/03/04 (天気:晴れ)

のように途中スペースを挟んだり、文字列と数値が混在しているようなデータを一気に読み込みたい時に便利です。

広告

fprintf()

/*四日目 プログラム3*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	FILE *fp;

	fp = fopen("test.txt", "w");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	fprintf(fp,"東京特許許可局!!!\n");

	fclose(fp);
	return 0;
}

「test.txt」

画像(ci_4_3)

次は「printf()」のファイル版とも言うべき「fprintf()」になります。

この関数の最大の特徴は「printf()」関数と同じように「%c,%d,%s」などフォーマットを指定して書き込む事ができます。

/*四日目 プログラム4*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	char str[128] = "good afternoon!!!";
	int ary[5] = {1,2,3,4,5};
	int ary2[5] = {65,66,67,68,69};
	int count;
	FILE *fp;

	fp = fopen("test.txt", "w");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	fprintf(fp,"good morning!!!\n");
	fprintf(fp,"%s\n",str);
	for(count = 0;count < 5;count++){
		fprintf(fp,"%d ",ary[count]);
	}
	fprintf(fp,"\n");
	for(count = 0;count < 5;count++){
		fprintf(fp,"%c ",ary2[count]);
	}

	fclose(fp);
	return 0;
}

「test.txt」

画像(ci_4_4)

これを使えば多彩な書き込み方ができますね!

fscanf()

/*四日目 プログラム5*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	char str[128];
	FILE *fp;

	fp = fopen("test.txt", "r");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	fscanf(fp,"%s",str);

	printf("%s\n",str);

	fclose(fp);
	return 0;
}

■実行結果■

画像(ci_4_5)

最後にさきほども少し言いました「scanf()」のファイル版「fscanf()」になります。

「scanf()」同様に「%c,%d,%s」などフォーマットを指定して読み込む事ができます。

できるのですが、「scanf()」同様にホワイトスペースで読み込みを辞める、異なるフォーマット指定子を指定すると正常に読み込まないなど使いこなすには注意が必要になります。

/*四日目 プログラム6*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	char str[128];
	int a;
	char c;
	int count;
	FILE *fp;

	fp = fopen("test.txt", "r");
	if (fp == NULL){
		printf("ファイルオープン失敗\n");
		exit(1);
	}

	for(count = 0;count < 4;count++){
		fscanf(fp,"%s",str);
		printf("%s\n",str);
	}
	for(count = 0;count < 5;count++){
		fscanf(fp,"%d",&a);
		printf("%d ",a);
	}
	for(count = 0;count < 11;count++){
		fscanf(fp,"%c",&c);
		printf("%c",c);
	}
	printf("\n");

	fclose(fp);
	return 0;
}

■実行結果■

画像(ci_4_6)

前に書き込んだ内容を読み込んでみました。

「%d」指定では数字の個数分読み込めば大丈夫ですが、一文字一文字独立したものを「%c」で読み込みたい場合はホワイトスペースも一文字とカウントされるので読み込む回数も文字数+スペースになります。

もちろん使いこなせば相当複雑な読み込みもできるので大変便利ですが、いろいろ注意点も多いのでもし自信がない場合は前回のように「fgetc()」などを使って一文字一文字地道に読み込んでいった方が無難かと思われます。

では次回はいったんファイル処理から離れて、そのファイル処理に必要な基礎知識、入出力に関する事と変数のサイズなどを調べたいと思います。

次回

五日目 入出力とサイズ

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)