27-4 3級対策:標準ライブラリ関数

3級の出題範囲にあるライブラリ関数(stdio.h の入出力関数と ctype.h の文字操作関数)と、関連するマクロを整理する。


27-4-1 入出力関数(stdio.h)

printf / scanf / getchar / putchar の4つ。すべて stdio.h で宣言されている。
試験では「正式な形(戻り値の型・引数)」と「何を返すか」も問われる。

関数正式な形動作戻り値
printfint printf(const char *format, ...);書式に従って標準出力へ出力する出力した文字数(エラー時は負の値)
scanfint scanf(const char *format, ...);書式に従って標準入力から読み込む正しく読み取れた項目の個数(何も読めず入力が終わったときは EOF
getcharint getchar(void);標準入力から1文字読み込む読み込んだ文字(入力が終わったときは EOF
putcharint putchar(int c);標準出力へ1文字出力する出力した文字(失敗時は EOF
printf / scanf の「...」は、引数をいくつでも渡せること(可変長引数)を表す書き方。
例:printf("ABC") が正常に実行されると、出力した文字数 3 を返す。
例:scanf("%d %d", &a, &b) で2つとも読めれば 2、1つだけなら 1 を返す。

マクロ EOF と NULL

マクロ意味
EOFファイルの終わり(ストリームにこれ以上の入力がない)ことを示す。stdio.h で定義され、多くの環境で値は -1
NULLどこも指していないポインタ(空ポインタ)を表す。stdio.h などで定義される
⚠ 紛らわしい3つを区別すること:
EOF=入力(ファイル)の終わり / NULL=空ポインタ / '¥0'(ヌル文字)=文字列の終わり
✅ 試験ポイント:入出力関数と EOF / NULLstdio.h。次節の文字操作関数は ctype.h
「toupper は stdio.h で宣言されている」(→誤り。ctype.h)のような正誤問題が出る。
使い方の詳細は 07章(printf)・08章(scanf)・25章(getchar / putchar / EOF)を参照。

27-4-2 is○○:文字の判定関数

#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('.') → 真(ピリオドは記号)

27-4-3 to○○:文字の変換関数

関数名変換内容
tolower(c)小文字に変換(to lower-case)'A' → 'a'('a' はそのまま)
toupper(c)大文字に変換(to upper-case)'b' → 'B'('B' はそのまま)
✅ to○○ 系は英字以外の文字を渡してもそのまま返す(エラーにならない)。

27-4-4 理解度チェック

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つを混同しないこと。