1. printfとscanf以外の標準入出力関数
標準入力(キーボードからの入力)、標準出力(画面への出力)を行う標準ライブラリ関数には第5章で説明した printf() や scanf() の他にも、以下のように 1文字専用の入出力関数と 1行専用の入出力関数が用意されています。
- 標準入力
- getchar():標準入力から文字を入力する
- fgets():指定したストリームから文字列を入力する(標準入力も指定可能)
- scanf():標準入力から書式付きで入力する
- 標準出力
- putchar():標準出力へ文字を出力する
- puts():標準出力へ文字列を出力する
- printf():標準出力へ書式付きで出力する
標準入出力関数を使用するには、#include <stdio.h>
が必要です。
2. getchar関数
キーボードから1文字入力します。
【書き方】
int c; // 入力文字を格納する変数はint型
c = getchar(); // getcharが返した文字をcに代入する
// 例(getcharとscanfの比較)
#include <stdio.h>
int main(void)
{
int ch1;
char ch2;
ch1 = getchar(); // どちらも一文字を入力します
scanf(" %c", &ch2); //
printf("ch1 = %c\n", ch1);
printf("ch2 = %c\n", ch2);
return 0;
}
【実行結果例】
a
b
ch1 = a
ch2 = b
※ 水色文字はキーボードからの入力
3. putchar関数
画面に 1文字出力します。
【書き方】
int c = ‘A’; // 出力文字はint型
putchar(c); // 文字’A’を出力する
// 例(putcharとprintfの比較)
#include <stdio.h>
int main(void)
{
int ch = 'A';
putchar(ch); // どちらも一文字を出力します
printf("%c", ch); //
return 0;
}
【実行結果例】
AA
4. getcharとputcharで繰り返し文字の入出力を行う
以下の例では、「Ctrl+Z」(UNIXの環境では「Ctrl+D」)が入力されるまで、1文字入出力を行います。
#include <stdio.h>
int main(void)
{
int stg;
// 「EOF」 が返されるまで1文字入出力
while ((stg = getchar()) != EOF) {
putchar(stg);
}
return 0;
}
【実行結果例】
A
A
B
B
C
C
^Z ← 「Ctrl+Z」(UNIXの環境では「Ctrl+D」)を入力
※ 水色文字はキーボードからの入力
〇 演習問題
- getchar() を用いて 1 文字入力を行い、Ctr+Z が入力されるまで次の処理を繰り返しなさい。
大文字、小文字に関係なく、アルファベットを入力した場合には、それぞれの入力した個数を数えなさい。 - 1の処理終了後、アルファベットをそれぞれ何個ずつ入力したか出力しなさい。
※ 文字コードはASCIIとする。
(ヒント)
- 入力アルファベットの個数を数えるカウンタは大きさ 26 の配列で用意。
- 最初に、配列の 26個の要素すべてを0クリアすること。
- A~Z、a~z は ASCIIコードの 65~90、97~122 に該当することを考えれば、 配列の何番目をカウントUP するかは計算で求められるはず。
【実行結果例】
文字を入力しなさい(終了条件:Ctrl+Z)
abcdef678ABCDEFopuKLH
ghtJK+ghjBBBdgjk
^Z
a : 2個入力 b : 5個入力 c : 2個入力
d : 3個入力 e : 2個入力 f : 2個入力
g : 3個入力 h : 3個入力 i : 0個入力
j : 3個入力 k : 3個入力 l : 1個入力
m : 0個入力 n : 0個入力 o : 1個入力
p : 1個入力 q : 0個入力 r : 0個入力
s : 0個入力 t : 1個入力 u : 1個入力
v : 0個入力 w : 0個入力 x : 0個入力
y : 0個入力 z : 0個入力
※ 水色文字はキーボードからの入力。
※ UNIXの環境では「Ctrl+D」)を入力してください。
コメント