3級の出題範囲にあるライブラリ関数(stdio.h の入出力関数と ctype.h の文字操作関数)と、関連するマクロを整理する。
printf / scanf / getchar / putchar の4つ。すべて stdio.h で宣言されている。
試験では「正式な形(戻り値の型・引数)」と「何を返すか」も問われる。
| 関数 | 正式な形 | 動作 | 戻り値 |
|---|---|---|---|
printf | int printf(const char *format, ...); | 書式に従って標準出力へ出力する | 出力した文字数(エラー時は負の値) |
scanf | int scanf(const char *format, ...); | 書式に従って標準入力から読み込む | 正しく読み取れた項目の個数(何も読めず入力が終わったときは EOF) |
getchar | int getchar(void); | 標準入力から1文字読み込む | 読み込んだ文字(入力が終わったときは EOF) |
putchar | int putchar(int c); | 標準出力へ1文字出力する | 出力した文字(失敗時は EOF) |
printf / scanf の「...」は、引数をいくつでも渡せること(可変長引数)を表す書き方。printf("ABC") が正常に実行されると、出力した文字数 3 を返す。scanf("%d %d", &a, &b) で2つとも読めれば 2、1つだけなら 1 を返す。
| マクロ | 意味 |
|---|---|
EOF | ファイルの終わり(ストリームにこれ以上の入力がない)ことを示す。stdio.h で定義され、多くの環境で値は -1 |
NULL | どこも指していないポインタ(空ポインタ)を表す。stdio.h などで定義される |
EOF=入力(ファイル)の終わり / NULL=空ポインタ / '¥0'(ヌル文字)=文字列の終わり
EOF / NULL は stdio.h。次節の文字操作関数は ctype.h。#include <ctype.h> が必要。真なら 0 以外、偽なら 0 を返す。
| 関数名 | 語源 | 判定内容 | 真になる例 |
|---|---|---|---|
isalpha(c) | alpha(アルファベット) | 英字(a〜z、A〜Z) | 'A', 'z' |
isdigit(c) | digit(数字) | 数字(0〜9) | '0', '9' |
isalnum(c) | alpha + numeric | 英字または数字 | 'A', '3' |
islower(c) | lower(小文字) | 小文字英字(a〜z) | 'a', 'z' |
isupper(c) | upper(大文字) | 大文字英字(A〜Z) | 'A', 'Z' |
isspace(c) | space(空白) | 空白文字(スペース・タブ・改行など) | ' ', '¥t', '¥n' |
ispunct(c) | punct(句読点・記号) | 記号(英数字・空白以外の表示文字) | '!', '?', '#', '.' |
isgraph(c) | graph(グラフィック) | 表示可能文字(空白は含まない) | 'A', '!', '5' |
isprint(c) | print(印刷可能) | 表示可能文字(空白も含む) | ' ', 'A', '9', '*' |
iscntrl(c) | cntrl(制御文字) | 制御文字 | '¥n', '¥t', '¥0' |
isxdigit(c) | xdigit(16進数字) | 16進数で使える文字 | '0'〜'9', 'a'〜'f', 'A'〜'F' |
isgraph:スペースは含まない(空白は非表示扱い)isprint:スペースは含む(空白も印刷可能)isspace('¥t') → 真(タブも空白文字に含まれる)ispunct('.') → 真(ピリオドは記号)
| 関数名 | 変換内容 | 例 |
|---|---|---|
tolower(c) | 小文字に変換(to lower-case) | 'A' → 'a'('a' はそのまま) |
toupper(c) | 大文字に変換(to upper-case) | 'b' → 'B'('B' はそのまま) |
Q1. isalnum('3') の結果として正しいものはどれか。
正解:イ
'3' は数字なので isalnum(英字または数字)は真を返す。
Q2. isgraph(' ')(スペース文字)の結果として正しいものはどれか。
正解:ア(偽)
isgraph は空白を含まない。isprint なら空白は真になる。
Q3. isspace('¥t')(タブ文字)の結果として正しいものはどれか。
正解:イ(真)
isspace はスペースだけでなくタブ('¥t')・改行('¥n')なども空白文字として真を返す。
Q4. isxdigit('G') の結果として正しいものはどれか。
正解:ア(偽)
16進数字は '0'〜'9', 'a'〜'f', 'A'〜'F'。'G' はこの範囲外なので偽。
Q5. toupper('a') の戻り値はどれか。
正解:ウ('A')
toupper は小文字を大文字に変換する。'a' → 'A'。
Q6. printf("ABC") が正常に実行されたときの戻り値はどれか。
正解:イ(3)
printf は出力した文字数を返す。"ABC" は3文字なので 3。正式な形は int printf(const char *format, ...); で、戻り値の型は int。
Q7. scanf("%d %d", &a, &b) で2つとも正しく読み取れたときの戻り値はどれか。
正解:ウ(2)
scanf は正しく読み取れた項目の個数を返す。2つとも読めれば 2、1つだけなら 1。何も読めずに入力が終わったときは EOF を返す。
Q8. マクロ NULL が表すものはどれか。
正解:ウ
NULL は「どこも指していないポインタ(空ポインタ)」を表すマクロ。文字列の終わりは '¥0'(ヌル文字)、ファイルの終わりは EOF。3つを混同しないこと。