3章 色々な入出力を覚えよう

 

概要

入出力の方法には、キーボードを使用する方法、ファイルを使用する方法など、色々な方法が用意されています。ここではこれらの内、キーボードからプログラムに値を入力する方法について学びます。

また、入出力する文字の体裁を整える書式について学びます。

 

この章の目標

キーボードを使用した入力方法について覚える。

入出力の書式について覚える。

 

--------------------------------------------

3.1 モニタへの文字の出力

--------------------------------------------

printf、注意[p.13]

printfで計算結果を表示、注意[p.20]

 

モニタ(ディスプレイ)に文字を表示する書式付き出力(printf)について説明します。

 

printf関数

printf関数の括弧内は、書式と変数並びで構成されています。

 

printf(書式,変数並び)

・書式

 書式は、ダブルクォーテーション(")でくくられた文字列で、大きく下記の二つに分類されます。

 @一般文字列

 A書式制御文字列

・変数並び

 書式制御文字列とともに記述

 変数の区切りは、カンマ(,)で区切る

 省略可能

--------------------------------------------

●書式

・@一般文字列

特殊な文字

        \n 改行

        \t タブ

        \b 後退

        \r 復帰

        \a ベル

        \\ バックスラッシュ

        \' 単一引用符

        \" 二重引用符(ダブルクォーテーション)

 

・A書式制御文字列

書式制御文字列は、次のような項目で構成されています。

 

%「フラグ」「[0]w」「.n」「修飾子」型

 

3.1-1 書式制御文字列

--------------------------------------------

●出力例

P例:3.1-1)

#include<stdio.h>

 

main()

{

        double x;

 

        x = 12.345;

        printf("x = %lf\n",x);

        printf("x = %+.2lf\n",x);

        printf("x = %05.1lf\n",x);

 

        printf("%c\n",'A');

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

 

        printf("d:%d, o:%#o, x:%#x\n",16,16,16);

 

        printf("123.45 = %e\n",123.45);

}

 

--------------------------------------------

3.2 キーボードからの入力

--------------------------------------------

3章 数値を入力しよう−scanf−[pp.33-39]

 

キーボードから文字や数値を入力する書式付き入力(scanf)について説明します。

 

scanf関数[p.34]

scanf関数の括弧内は、書式と変数並びで構成されています。

 

scanf(書式,引数並び)

・書式

 書式は、ダブルクォーテーション(")でくくられた文字列で、printf関数と異なり、書式制御文字列のみ記述します。

 

・引数並び

 書式制御文字列とともに記述

 変数の区切りは、カンマ(,)で区切る

 省略不可

--------------------------------------------

●書式

・書式制御文字列

書式制御文字列は、次のような項目で構成されています。

 

%「*」「w」「修飾子」型

 

3.2-1 書式制御文字列

--------------------------------------------

●入力例

P例:3.2-1)

#include<stdio.h>

 

main()

{

        int x;

 

        scanf("%d",&x);

        printf("x = %d\n",x);

}

・例

(1)通常

% 5

% x = 5

(2)ブランク、タブ、改行などは読み込まれない

(2-1)ブランク(スペース)を入力

%        3

% x = 3

(2-2)改行を入力

%

% 3

% x = 3

・頁

例題3-1[pp.35-36]

なぜ変数に&を付ける?[p.37]

 

P例:3.2-2)

#include<stdio.h>

 

main()

{

        int x,y;

 

        printf("x y = ");

        scanf("%d%d",&x,&y);

        printf("x = %d, y = %d\n",x,y);

 

        printf("x , y = ");

        scanf("%d , %d",&x,&y);

        printf("x = %d, y = %d\n",x,y);

}

・例

% 12 34

% x = 12, y = 34

% x , y = 12,34

% x = 12, y = 34

・頁

注意[p.35]

 

P例:3.2-3)

#include<stdio.h>

 

main()

{

        int x,y;

        double z;

 

        printf("2w3w = ");

        scanf("%2d%3d",&x,&y);

        printf("x = %d, y = %d\n",x,y);

 

        printf("z = ");

        scanf("%5lf",&z);

        printf("z = %lf\n",z);

}

・例

(1)正しい入力

% 2w3w = 12345

% x = 12, y = 345

% z = 12.34

% z = 12.340000

ピリオド(.)もフィールド幅の数に入れます。

(2)間違った入力

% 2w3w = 123456

% x = 12, y = 345

% z = z = 6.000000

フィールド幅が間違っているため、まだ代入されていない6を次のzの値として代入しています。

・頁

例題3-2[p.36]、例題3-3[p.37]

 

P例:3.2-4)

#include<stdio.h>

 

main()

{

        char x;

 

        printf("x = ");

        scanf("%c",&x);

        printf("x = %c\n",x);

}

・例

% x = A

% x = A

 

 

P3.2-5

#include<stdio.h>

 

main()

{

        int x;

 

        printf("x = ");

        scanf("%*d %d",&x);

        printf("x = %d\n",x);

}

・例

% x = 123 456

% x = 456

 

--------------------------------------------

3.3 その他の入出力

--------------------------------------------

●入出力関数

書式付き入出力(scanf, printf)の他、入出力関数には次のような関数があります。

 

○コンソール入出力

書式付き入出力                          scanf, printf

1文字入出力                            getchar, putchar

1行入出力                                      gets, puts

 

○ファイル入出力

ファイルオープンとクローズ      fopen, fclose

1文字入出力                            getc, putc, fgetc, fputc,

1行入出力                                      fgets, fputs

ファイル入出力                          fscanf, fprintf

 

これらの入出力の内、ファイル入出力については、第8章で説明します。

--------------------------------------------

1文字の入出力

 

P例:3.3-1)

#include <stdio.h>

 

main()

{

        char c;

 

        printf("input : ");

        c = getchar();

        c++;

        printf("output: ");

        putchar(c);

        printf(" (%d)\n",c);

}

・例

% input : a

% output: b (98)

文字にも大きさがあります。aの文字より数が1だけ大きい文字が、bの文字で、これを10進数で表すと、98になります。

--------------------------------------------

●1行入出力

 

P例:3.3-2)

#include <stdio.h>

 

main()

{

        char c[100];

 

        printf("input : ");

        gets(c);

        printf("output: ");

        puts(c);

}

・例

% input : ab      cd e

% output: ab      cd e

変数の宣言で、c[100]とあるのは、99個の文字を記録できる配列を意味します。文字列の最後を表す'\0'を含めるため99個の文字となります。詳しくは、第6章の配列と第7章の文字処理で学びます。

--------------------------------------------