入出力

目次

  1. 端末入出力サンプルプログラム
  2. 端末(画面、キーボード)との入出力(printf()、scanf()関数)
  3. 練習課題その2
  4. ファイル入出力サンプルプログラム
  5. ファイルとの入出力(ファイルポインタ、fopen()、fclose()、fprintf()、fscanf()関数)
  6. 練習課題その3

1. 端末入出力サンプルプログラム

 以下の内容のファイルを作り、test3.c として保存して下さい。

/* Program "test3.c" --- 端末との入出力 */

#include <stdio.h>

int main(void)
{
	int x;
	double y;
	char str[256];

	/* 整数の入力 */
	printf("input int>");
	scanf("%d", &x);

	/* 浮動小数点(double)の入力 */
	printf("input double>");
	scanf("%lf", &y);

	/* 文字列の入力 */
	printf("input string>");
	scanf("%s", str);

	/* 入力されたデータの表示 */
	printf("int=%d \ndouble=%f \nstr=%s\n", x, y, str);

	return 0;
}

 ソースプログラムtest3.cをコンパイルし、実行して下さい。
 実行すると、キーボードからの入力を受け付けます。画面にでる指示に従って、整数、小数、文字列を入力して下さい。以下は、実行例です(太字が入力文字)。

./test3 
input int>123
input double>999.876
input string>NAMIHEI
int=123
double=999.876000
str=NAMIHEI 


2. 端末(画面、キーボード)との入出力

 C言語によるプログラムでは、printf(), scanf()関数を用いて端末に対する入出力を行なうことができます。以下に、これらの関数の使用方法を示します。

  printf(), scanf()の使い方

    1. stdio.hをインクルードしなくてはならない。(#include<stdio.h>を書く)

    2. printf( FORMAT, 変数1, 変数2, …)

	    例) 整数x、浮動小数点y、文字'R'、文字列"TARAKO"を出力する
		int x;
		double y;
	        printf("int=%d, double=%f, character=%c, string=%s\n",
		       x, y, 'R', "TARAKO");

	    注) 「%?」の部分に変数の内容を埋め込むことができる
	        ?は変数の種類によって異なる

    3. scanf( FORMAT, &変数1, &変数2, …)

	    例) 浮動小数点(double)を変数xに入力する
		dobule x;
	        scanf("%lf", &x);

	    例) 文字列を変数strに入力する
		char str[256];
	        scanf("%s", str);

	    注) 文字列の場合「&」はいりません

    4. FORMATについて詳しくは、こちらのサイト等やmanを参照

    5. 文字型定数の表現方法

        ◎ 一文字を表す時...  シングルクォーテーション 例) 'a'

        ◎ 文字列を表す時...  ダブルクォーテーション   例) "hoge"

 サンプルプログラム中scanf(), printf()の意味は分かりましたか? 分かった人は次の練習問題をやりましょう。

練習課題その2

サンプルプログラムtest3.cを参考にして、自分の名前と年齢等を入力し、それを画面に表示するプログラムを作成してみましょう。

練習問題2の回答例


3. ファイル出力サンプルプログラム

 以下の内容のファイルを作り、test4.c として保存してコンパイルして下さい。


/* Program "test4.c" --- ファイルへの出力 */

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(void)
{
	int n;
	double x, y, z;
	FILE *fp;

	if( (fp = fopen("result.dat", "w")) == NULL )
	{
		printf(" *** file open error *** \n");
		exit(1);
	}

	for( n = 1; n <= 10; n++)
	{
		x = n;
		y = sqrt( x );
		z = log( x );
		fprintf( fp, " x = %lf, x^0.5 = %lf, log(x) = %lf\n", x, y, z );
	}

	fclose( fp );

	return 0;
}

 コンパイルし終わったら、実行して下さい。

 エラーがなければ、result.datというファイルができているはずです。
 lsコマンドでファイルの有無を確認して下さい。コマンドでこのファイルの中身を表示して下さい。以下の内容であれば、プログラムは正しく動いています。

 x = 1.000000, x^0.5 = 1.000000, log(x) = 0.000000
 x = 2.000000, x^0.5 = 1.414214, log(x) = 0.693147
 x = 3.000000, x^0.5 = 1.732051, log(x) = 1.098612
 x = 4.000000, x^0.5 = 2.000000, log(x) = 1.386294
 x = 5.000000, x^0.5 = 2.236068, log(x) = 1.609438
 x = 6.000000, x^0.5 = 2.449490, log(x) = 1.791759
 x = 7.000000, x^0.5 = 2.645751, log(x) = 1.945910
 x = 8.000000, x^0.5 = 2.828427, log(x) = 2.079442
 x = 9.000000, x^0.5 = 3.000000, log(x) = 2.197225
 x = 10.000000, x^0.5 = 3.162278, log(x) = 2.302585



4. ファイルとの入出力

C言語では、ファイルに対しても端末の場合と同様にして入出力を行なうことができます。
サンプルプログラムtest4.cを例に、その方法を説明します。


	FILE *fp;

	if( (fp = fopen("result.dat", "w")) == NULL )
	{
		printf(" *** file open error *** \n");
		exit(1);
	}


 ファイルに対する入出力を行なう前に、そのファイルを開く必要があります。
 ファイルを開くには、fopen()関数を使用します。fp=fopen("result.dat", "w")とすると、result.datという名前のファイルがモードw(書き込み)でオープンされます。
 fpはファイルポインタと呼ばれるもので、 FILE *fp で宣言されています。
 ファイルディスクリプタは、開いたファイルの情報を扱うための変数(のようなもの)と
考えて下さい。

 fopen()は、ファイルオープンに失敗するとNULLという値を返します。この例では、if文で、NULLが返ったかどうかを判定し、もしそうならexit()関数でプログラムを終了させています。 また、この関数を使うためstdlib.hをincludeしています。


	fprintf( fp, " x = %lf, x^0.5 = %lf, log(x) = %lf\n", x, y, z );


 一度ファイルを開くと、ファイルポインタを用いてファイルへの入出力を行なうことができます。ファイルへの出力にはfprintf()関数を用います。
使い方はprintf()と殆んど同じですが、上の例のように、最初にファイルポインタを指定する必要があります。

 また、ファイルからの入力(ファイル内のデータの読み込み)にはfscanf()関数を用います。
fscanf()関数の使い方も、scanf()と殆んど同じですが、fprintf()関数と同様に、最初にファイルポインタを指定する必要があります。
fscanf()関数は、決まった形式で書かれたファイルを読み込む際に使用できるため、ファイル内の空白区切りファイルや カンマ区切り等を意識して、第2引数のフォーマットを書く必要があります。

	fclose( fp );


 使い終ったファイルは、最後に閉じなくてはなりません。
 ファイルを閉じるには、fclose()関数を使用します。引数としてファイルポインタを与え、閉じるファイルを指定します。

 

4. 練習課題その3

キーボードから入力した自分のプロフィールをファイルに保存するプログラムを作成せよ

1. プロフィール(名前、年齢、出身、その他)をファイル myprofile.dat に保存するプログラムを、test3.c、test4.cを参考に作って下さい。

2. 終った人は、保存されたプロフィールファイルを読み込んで、画面に表示するプログラムを作ってみましょう。

ヒント) ファイルを読み込むには…
◎fopen()のモードに "r"を指定する
◎fscanf()をscanf()のように使用する
(ファイルポインタの指定は必要です)

ファイルへのデータ書き出しプログラムの回答例
ファイルからのデータ読み出しプログラムの回答例

 
戻る