第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
(P例:3.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章の文字処理で学びます。
--------------------------------------------