久しぶりのC言語再入門 〜scanfとフォーマット指定子を中心に〜

目次
はじめに
最近、とあるきっかけからC言語を再び学び始めることになりました。学生時代に一度触れて以来、実務ではほとんど使用してこなかったため、かなり新鮮な気持ちでコードを書いています。
今回は、その学び直しの中でも「変数宣言」「入力処理(scanf)」「条件分岐」「ループ処理」といった基本的な構文の確認を行いながら、特にC言語らしさが出る scanf とそのフォーマット指定子に焦点を当てて振り返ってみたいと思います。
変数の宣言と基本構文
C言語では、変数を使用する前に型を明示して宣言する必要があります。たとえば整数値を扱う場合は以下のように書きます。
int number;
この段階ではまだ値は代入されていません。次にこの変数にユーザーからの入力を受け取る際に使うのが、C言語の標準入力関数 scanf です。
scanfとフォーマット指定子
C言語で入力を受け取る際によく使われるのが scanf 関数です。たとえば、整数値を1つ受け取る場合は以下のように書きます。
scanf(“%d”, &number);
ここでのポイントは以下の通りです。
・”%d” は「整数(decimal)」を意味するフォーマット指定子
・&number の & は「変数のアドレス」を示すアドレス演算子
他のフォーマット指定子の例は次の通りです。
フォーマット指定子 | 意味 |
%d | 整数(int) |
%f | 実数(float) |
%c | 1文字(char) |
%s | 文字列(char配列) |
特にC言語を初めて扱ったときは、「なぜ変数名に & をつけるのか?」「% で始まるこの記号は何なのか?」といった点で戸惑いやすいところだと思います。
他の言語、たとえばJavaScriptやPythonではこのようなフォーマット指定子の概念はあまり意識せずに入力処理ができるため、C言語特有の「低レイヤーさ」を感じるポイントでもあります。
条件分岐とループの基本
条件分岐(if)やループ(for, while)については、構文的には他の言語とあまり大きな違いはありません。以下はその基本的な例です。
if文の例:
if (number > 0) {
printf(“正の数です。\n”);
} else if (number < 0) {
printf(“負の数です。\n”);
} else {
printf(“ゼロです。\n”);
}
for文の例:
for (int i = 0; i < 5; i++) {
printf(“%d回目のループです。\n”, i + 1);
}
while文の例:
int i = 0;
while (i < 5) {
printf(“%d回目のループです。\n”, i + 1);
i++;
}
こうした制御構文は、C言語に限らず他の多くの言語でも共通して使われているため、比較的なじみやすい部分かもしれません。
おわりに
今回は、C言語の学び直しの中でも特に「変数宣言」と「scanf による入力処理」、そして基本的な条件分岐・ループ処理について振り返りました。
久しぶりに触れてみると、scanf(“%d”, &number); のようなC特有の記法が逆に新鮮に感じられます。他のモダンな言語と比較して「仕組みが見えやすい」「低レベルに近い操作ができる」というのがC言語の魅力でもあると、あらためて実感しました。
このあとポインタや配列、関数ポインタなどに進んでいく予定ですが、まずはしっかり基本を復習しながら、当時とはまた違う視点でC言語と向き合っていきたいと思います。