画像(logo)

HOME/[C言語 入門]小学生でもわかるC言語3 目次/五日目 入出力とサイズ

広告

[C言語 入門 小学生でもわかるC言語3]
五日目 入出力とサイズ

広告

↓2016年02月29日発売↓

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

目次へ戻る

入出力とサイズ

今回はファイル処理に必要な基礎知識、入出力に関しての事と変数のサイズを調べてみたいと思います。

標準入出力

みなさんが普通にキーボードから入力して画面に出力する。

実はこのキーボードからの入力と画面への出力には正式名称のようなものがあります。

キーボードからの入力を標準入力といいプログラムでは「stdin」と表されます。

画面への出力を標準出力といいプログラムでは「stdout」と表されます。

(※普通のパソコンの場合です。リダイレクトといってこの標準入出力の内容を変更する事もできます)

スタンダード(通常・標準)なインとアウトみたいな意味です。

ちょっとここまでだと何をいっているのか意味わからないと思いますのでもう少し続きを見てみましょう。

ストリーム

まず前回学んだファイル書き込みの「fputs()」を使った簡単なプログラムをご覧ください。

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

int main(){
	char *str = "hello world!!!";
	FILE *fp;

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

	fputs(str,fp);

	fclose(fp);
	return 0;
}

「test.txt」

画像(ci_5_1)

「hello world!!!」という文章を用意して「test.txt」に書き込みをしてみました。

前回学んだ通りです。

何も問題はないですね!

ではこの「fputs()」に注目した次のプログラムを実行してみてください。

/*五日目 プログラム2*/
#include <stdio.h>

int main(){
	char *str = "hello world!!!";

	fputs(str,stdout);

	printf("\n");

	return 0;
}

■実行結果■

画像(ci_5_2)

なんと画面にさきほどの文章が表示されました!

プログラムの「fputs()」を見てみると

fputs(str,stdout);

書き込む先が「stdout」つまりは標準出力になっているのが確認できます。

書き込む場所がファイルから画面になったという事ですね!

そうなんです!

「書き込む場所や読み込む場所が変わるだけで同じ手順で操作できるようにしましょう!」

っていうのが大事なトコロで、この考え方をストリームと言います。

ファイルもキーボードも画面も同じストリーム(流れ)で処理しようみたいな感じです。たぶん。

と、いう事はもう一つの標準入力も同じように考える事ができそうです。

次のプログラムを実行してみてください。

入力待ちになりますので適当な文章を入力してエンターを押してください。

/*五日目 プログラム3*/
#include <stdio.h>

int main(){
	char str[256];

	fgets(str,256,stdin);

	printf("%s",str);

	return 0;
}

■実行結果■

画像(ci_5_3)

思った通り、読み込む場所を標準入力である「stdin」に変更したのでキーボードからの読み取りになりました!

このストリームという考え方はこのファイル入出力だけではなく通信プログラムなどにおいても同じような考え方が使われます。

もちろん全て同じ手順というワケではないですが、例えば出力先をプリンターにすればプリンターから印刷され、バーコードリーダーからの入力に切り替えればバーコードを読み取ろうとする、とかそんな感じです。

今後いろいろな場面で登場する事になると思いますので覚えておきましょう!

広告

サイズを調べる

続いて変数のサイズを調べたいと思います。

そんなサイズなんて調べてどうするんだと思うかもしれませんが、この「正確なサイズを知る」という場面がこの後ちょくちょく出てきます。

/*五日目 プログラム4*/
#include <stdio.h>

int main(){
	printf("char = %d\n",sizeof(char));
	printf("int = %d\n",sizeof(int));

	return 0;
}

■実行結果■

画像(ci_5_4)

サイズを調べるには「sizeof()」というものを使います。

以前にも少し使いましたね。

カッコの中に調べたい変数やら配列やらをいれればサイズを求める事ができます。

/*五日目 プログラム5*/
#include <stdio.h>

struct AAA{
	char c[128];
	int x,y;
};

struct AAA aaa;

int main(){
	printf("aaa = %d\n",sizeof(aaa));
	printf("struct AAA = %d\n",sizeof(struct AAA));

	return 0;
}

■実行結果■

画像(ci_5_5)

構造体のサイズを調べる事もできます。

「char c[128]」→128バイトに「int x,y」→8バイトを足すので合計136バイトですね!

sizeofを使ったテクニック

最後に「sizeof」を使った簡単なテクニックをご紹介します。

/*五日目 プログラム6*/
#include <stdio.h>

int main(){
	int count;
	int hairetu[10] = {0,1,2,3,4,5,6,7,8,9};

	printf("hairetu = %d\n",sizeof(hairetu) / sizeof(int));

	for(count = 0;count < sizeof(hairetu) / sizeof(int);count++){
		printf("hairetu[%d] = %d\n",count,hairetu[count]);

	}

	return 0;
}

■実行結果■

画像(ci_5_6)

「for」文の中の「sizeof」に注目です。

for(count = 0;count < sizeof(hairetu) / sizeof(int);count++)

「sizeof(hairetu)」だとサイズは「40」になりますね。

「sizeof(int)」のサイズは「4」です。

これを「40÷4」とすると「10」でつまりは配列の個数が求められるワケです。

こうすれば配列の大きさが変わった時も「for」文は変更せずに済みますね。

それでは基礎知識を補充したトコロで次回は再びファイル処理に関する事をやっていきたいと思います。

次回

六日目 ファイル読み書き(数値)

□ページの先頭へ□

□目次へ戻る□

□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時点)