久しぶりの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)
%c1文字(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言語と向き合っていきたいと思います。