
6日でできる 新C言語入門|条件分岐
条件によって、処理の流れを切り替える。
if文とswitch文を理解して、判断できるC言語プログラムを書けるようになろう。
C言語のプログラムは、上から順番に処理を実行するだけではありません。条件によって、実行する処理を変えることができます。この仕組みを条件分岐と呼びます。
たとえば、入力された数値が偶数なら偶数ですと表示し、奇数なら奇数ですと表示する処理があります。また、点数が80点以上なら優秀、60点以上なら合格、それ以外なら再確認が必要、というように、条件に応じてメッセージを変えることもできます。
条件分岐を使えるようになると、プログラムは一気に実用的になります。入力された値を判断する、メニュー番号によって処理を切り替える、エラーかどうかを判定する、条件に応じて計算方法を変えるなど、実際の開発でもよく使われる基本技術です。
C言語で条件分岐を行う代表的な構文には、if文とswitch文があります。if文は条件式を使って判断する構文で、比較演算子を使いながら、もし条件が成り立つならこの処理を行う、という形で書きます。switch文は、変数の値がいくつかの候補のどれに当てはまるかによって処理を分ける構文です。
この記事では、if文の基本、比較演算子、elseやelse ifによる複数条件の分岐、scanf関数を使った入力値の判定、Visual Studio 2026でscanf関数を使うときのSDLチェックの注意点、switch文によるメニュー選択の書き方まで、C言語初心者にも分かりやすく解説していきます。
条件分岐は処理の流れを切り替える仕組み
条件分岐とは、条件が成り立つかどうかによって、実行する処理を変える仕組みです。
普段の生活でも、条件分岐に近い考え方はたくさんあります。雨が降っていれば傘を持つ、点数が合格点以上なら合格、メニュー番号が1ならカレーを選ぶ、といった判断です。
C言語でも同じように、条件に応じて処理を分けることができます。
| 判断したい内容 | 条件の例 | 実行する処理の例 |
|---|---|---|
| 数値が正かどうか | number > 0 | 正の数ですと表示する |
| 点数が合格点以上か | score >= 60 | 合格ですと表示する |
| 偶数か奇数か | number % 2 == 0 | 偶数ですと表示する |
| メニュー番号が何番か | menu == 1 | 番号に合った処理を実行する |
| 入力値が範囲内か | value >= 1 && value <= 3 | 有効な番号として扱う |
条件分岐を使うと、プログラムが状況に応じて違う動きをできるようになります。これは、単純な表示プログラムから、入力に反応するプログラムへ進むための大切なステップです。
図:条件によって処理の流れが変わる

この図から分かること
この図から分かるのは、条件分岐では、条件が成り立つかどうかによって進む処理が変わるという点です。
条件が真の場合は処理Aへ進み、条件が偽の場合は処理Bへ進みます。C言語では、このような判断をif文やswitch文で表現できます。プログラムに判断する力を持たせるための基本が条件分岐です。
if文の基本
if文は、条件が成り立つ場合だけ処理を実行したいときに使います。基本の形は次のようになります。
if (条件式) {
条件が成り立つときに実行する処理;
}ifの後ろにある丸かっこの中に条件式を書きます。条件式が真であれば、波かっこの中の処理が実行されます。条件式が偽であれば、その中の処理は実行されません。
たとえば、numberが0より大きいときだけメッセージを表示したい場合は、次のように書けます。
if (number > 0) {
printf("正の数です。\n");
}この場合、number > 0が成り立つときだけ、正の数です。と表示されます。
| 部分 | 役割 |
|---|---|
| if | 条件分岐を行うためのキーワード |
| 条件式 | 真か偽かを判定する式 |
| { } | 条件が真のときに実行する処理の範囲 |
| printf関数など | 条件に合ったときに実行される処理 |
if文では、波かっこの中に複数の処理を書くこともできます。条件が真のときだけ、まとめて実行される処理の範囲になります。
比較演算子で値を比べる
if文の条件式では、値同士を比べるために比較演算子を使います。比較演算子は、ある値が別の値より大きいか、等しいか、異なるかなどを判定するための記号です。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| > | より大きい | a > 0 |
| >= | 以上 | a >= 0 |
| < | より小さい | a < 0 |
| <= | 以下 | a <= 0 |
| == | 等しい | a == 0 |
| != | 等しくない | a != 0 |
特に注意したいのが、等しいかどうかを調べるときは==を使うという点です。C言語では、=は代入を表します。条件式でa = 0と書くと、aに0を代入する意味になってしまいます。
等しいかどうかを判定したいときは、必ず==を使います。
| 書き方 | 意味 |
|---|---|
| a = 0 | aに0を代入する |
| a == 0 | aが0と等しいかを判定する |
この違いは初心者がとても間違えやすい部分です。if文の中で等しいかどうかを判断するときは、==を使うとしっかり覚えておきましょう。
if文とelse文
if文では、条件が成り立つ場合の処理を書けます。さらに、条件が成り立たない場合の処理を書きたいときはelseを使います。
if (条件式) {
条件が真のときの処理;
} else {
条件が偽のときの処理;
}たとえば、点数が60点以上なら合格、それ以外なら再確認が必要と表示したい場合は、次のように書けます。
if (score >= 60) {
printf("合格です。\n");
} else {
printf("再確認が必要です。\n");
}elseを使うと、条件が真のときと偽のときの両方に対応できます。これにより、条件に合わなかった場合でも、別の処理を明確に書けます。
else ifで複数条件を分ける
条件が2つだけでなく、3つ以上ある場合はelse ifを使います。
if (score >= 80) {
printf("とても良い点数です。\n");
} else if (score >= 60) {
printf("合格です。\n");
} else {
printf("もう少し確認しましょう。\n");
}この書き方では、上から順番に条件が判定されます。最初にscore >= 80を確認し、成り立てばとても良い点数です。と表示します。成り立たない場合は次のscore >= 60を確認します。どちらにも当てはまらない場合はelseの処理が実行されます。
| 点数 | 実行される処理 |
|---|---|
| 85 | とても良い点数です。 |
| 70 | 合格です。 |
| 45 | もう少し確認しましょう。 |
else ifを使うときは、条件を書く順番が大切です。たとえば、score >= 60を先に書いてしまうと、85点でも先にscore >= 60に当てはまってしまい、score >= 80の処理まで進みません。より限定的な条件を先に書くと分かりやすくなります。
if文で入力値を判定するサンプルプログラム
次に、scanf関数で整数を入力し、その値が偶数か奇数かを判定するプログラムを見てみましょう。偶数か奇数かを調べるには、2で割った余りを使います。
プロジェクト/ファイル名: Lesson19_1/main.c
#include <stdio.h>
int main(void) {
int number;
printf("整数を入力してください:");
scanf("%d", &number);
if (number % 2 == 0) {
printf("入力された値は偶数です。\n");
} else {
printf("入力された値は奇数です。\n");
}
return 0;
}このプログラムでは、number % 2 == 0という条件式を使っています。%は割り算の余りを求める演算子です。numberを2で割った余りが0なら偶数、0でなければ奇数と判断できます。
| 式 | 意味 |
|---|---|
| number % 2 | numberを2で割った余り |
| number % 2 == 0 | 2で割った余りが0かどうか |
| ifの中の処理 | 偶数の場合に実行される |
| elseの中の処理 | 偶数ではない場合に実行される |
条件式の中では、余りを求める%と、等しいかどうかを調べる==を組み合わせています。このように、演算子を組み合わせることで、さまざまな条件を作ることができます。
図:偶数と奇数をif文で判定する流れ

この図から分かること
この図から分かるのは、偶数と奇数の判定では、2で割った余りを見るという考え方です。
number % 2 == 0が真なら、入力された値は偶数です。偽なら、2で割り切れないため奇数として扱います。if文を使うと、計算結果に応じて表示するメッセージを切り替えられます。
scanf関数で入力値を受け取る
scanf関数は、キーボードから入力された値を変数に入れるための関数です。整数を読み取る場合は、書式指定子%dを使います。
scanf("%d", &number);この書き方では、入力された整数をnumberに保存します。numberの前に&が付いている点が重要です。
scanf関数は、値をどこに保存すればよいのかを知る必要があります。numberだけを書くと、numberの中身の値を渡すことになります。一方、&numberと書くと、numberが置かれている場所、つまりメモリ上のアドレスを渡すことになります。
| 書き方 | 意味 |
|---|---|
| number | 変数numberの値 |
| &number | 変数numberの場所、アドレス |
| %d | 整数を入力する指定 |
| scanf("%d", &number); | 入力された整数をnumberに保存する |
scanf関数では、入力先の変数のアドレスを渡す必要があるため、&を付けます。この考え方は、ポインタを学ぶとさらに詳しく理解できるようになります。入門段階では、scanfでint型の変数に入力するときは、変数名の前に&を付ける、と覚えておくとよいでしょう。
Visual Studio 2026でscanf関数を使うときの注意点
Visual Studio 2026でscanf関数を使う場合、環境や設定によっては、scanf関数に対して警告やエラーが表示されることがあります。これは、scanf関数が入力の扱い方によっては安全性に注意が必要な関数として扱われるためです。
このプログラムを実行するためには、「SDLチェック」を無効にする必要があります。その理由は、 scanf 関数を使うからです。実は、この scanf 関数は安全性に問題があるため、使用することが推奨されていないためです。
表示される可能性があるメッセージには、次のようなものがあります。
「SDLチェック」ありの場合
戻り値が無視されました: scanf
scanf: This function or variable may be unsafe. Consider using scanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.Visual Studioでは、SDLチェックが有効な場合、scanf関数に関する警告がビルドの妨げになることがあります。教材でscanf関数を使って学習する場合は、プロジェクトの設定でSDLチェックをいいえにする方法があります。
ただし、安全性を意識する場合は、scanf_s関数を使う方法や、入力結果の戻り値を確認する書き方もあります。入門段階では、教材の方針に合わせて、scanf関数を使う場合の設定や注意点を理解しておくことが大切です。
| 項目 | 内容 |
|---|---|
| scanf関数 | キーボード入力を受け取る標準入力の関数 |
| scanf_s関数 | Microsoft環境で安全性を考慮して案内されることがある関数 |
| SDLチェック | 安全性に関するチェックを強める設定 |
| _CRT_SECURE_NO_WARNINGS | 特定の非推奨警告を抑制するために使われることがある定義 |
| 戻り値の確認 | 入力が成功したかどうかを確認する考え方 |
ここでは、C言語の条件分岐を学ぶことを目的として、scanf関数を使った入力例を扱っています。Visual Studio 2026で同じプログラムを試す場合は、使用しているプロジェクト設定に応じて、SDLチェックをいいえにする、scanf_s関数へ変更する、警告抑制の定義を使うなど、教材や開発方針に合った方法を選びます。
実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。

整数を入力してください:8
入力された値は偶数です。
整数を入力してください:13
入力された値は奇数です。scanf関数の戻り値も意識すると安全性が高まる
scanf関数は、入力に成功した項目数を戻り値として返します。たとえば、整数を1つ読み取るscanf("%d", &number);で入力に成功すると、戻り値は1になります。
入門段階では省略されることもありますが、より丁寧に書くなら、scanf関数の戻り値を確認できます。
if (scanf("%d", &number) == 1) {
printf("入力に成功しました。\n");
} else {
printf("整数を正しく入力できませんでした。\n");
}このように書くと、整数として正しく入力された場合だけ処理を進められます。条件分岐と入力処理は相性がよく、入力が正しいかどうかを判断する場面でもif文が役立ちます。
switch文の基本
if文は、条件式を使ってさまざまな判断ができます。一方、特定の変数の値によって処理を分けたい場合は、switch文が便利です。
switch文は、メニュー番号や選択肢のように、値が1、2、3などに分かれている場合によく使います。
基本の形は次のようになります。
switch (変数) {
case 値1:
値1のときの処理;
break;
case 値2:
値2のときの処理;
break;
default:
どれにも当てはまらないときの処理;
break;
}switchの丸かっこの中には、判定したい変数や式を書きます。その値がcaseの値と一致すると、そのcaseの処理が実行されます。
| キーワード | 役割 |
|---|---|
| switch | 値によって処理を分岐する |
| case | 値が一致したときの処理を書く |
| break | そのcaseの処理を終えてswitch文を抜ける |
| default | どのcaseにも一致しない場合の処理を書く |
switch文では、breakが大切です。breakを書かないと、次のcaseの処理まで続けて実行される場合があります。意図的にそうする場合もありますが、入門段階では各caseの最後にbreakを書くと覚えておくと安心です。
switch文でメニューを選ぶサンプルプログラム
次に、入力されたメニュー番号に応じてメッセージを表示するプログラムを見てみましょう。
プロジェクト/ファイル名: Lesson19_2/main.c
#include <stdio.h>
int main(void) {
int menu;
printf("学習メニューを選んでください(1~3):");
scanf("%d", &menu);
switch (menu) {
case 1:
printf("C言語の基本文法を選びました。\n");
break;
case 2:
printf("変数と演算の練習を選びました。\n");
break;
case 3:
printf("条件分岐の練習を選びました。\n");
break;
default:
printf("1~3の番号を入力してください。\n");
break;
}
return 0;
}実行結果
学習メニューを選んでください(1~3):2
変数と演算の練習を選びました。このプログラムでは、入力されたmenuの値によって処理を分けています。menuが1ならC言語の基本文法、2なら変数と演算の練習、3なら条件分岐の練習と表示します。
1から3以外の値が入力された場合は、defaultの処理が実行されます。defaultを用意しておくと、想定外の入力にも対応できます。
図:switch文で選択肢ごとに処理を分ける

この図から分かること
この図から分かるのは、switch文が値の候補ごとに処理を分ける構文だという点です。
menuの値が1ならcase 1、2ならcase 2、3ならcase 3の処理が実行されます。どれにも当てはまらない場合はdefaultの処理に進みます。各caseの最後にbreakを書くことで、その処理が終わったあとにswitch文を抜けられます。
if文とswitch文の使い分け
if文とswitch文は、どちらも条件分岐に使えます。ただし、得意な場面が少し違います。
| 構文 | 向いている場面 |
|---|---|
| if文 | 大小比較、範囲判定、複雑な条件式 |
| else if文 | 複数の条件を順番に判定したい場合 |
| switch文 | 1つの値が複数の候補のどれかを判定する場合 |
たとえば、score >= 80のように範囲で判断する場合はif文が向いています。一方、menuが1、2、3のどれかによって処理を分ける場合はswitch文が読みやすくなります。
| 判断内容 | 向いている構文 |
|---|---|
| 点数が60点以上か | if文 |
| 年齢が18歳以上か | if文 |
| メニュー番号が1、2、3のどれか | switch文 |
| 曜日番号によって表示を変える | switch文 |
| 複数条件を組み合わせる | if文 |
最初のうちは、範囲や大小を判断するならif文、決まった番号や選択肢を判断するならswitch文、と考えると分かりやすいです。
条件式では真と偽を考える
C言語の条件式は、真か偽かで判断されます。条件が成り立つ場合は真、成り立たない場合は偽です。
たとえば、numberが8のとき、number % 2 == 0は真です。8を2で割った余りは0だからです。一方、numberが13のときは、13を2で割った余りが1なので、number % 2 == 0は偽になります。
| number | number % 2 | number % 2 == 0 |
|---|---|---|
| 8 | 0 | 真 |
| 13 | 1 | 偽 |
| 20 | 0 | 真 |
| 21 | 1 | 偽 |
if文では、条件式が真のときにifの中の処理が実行されます。偽のときは、elseがあればelseの中の処理が実行されます。
複数の条件を組み合わせる
条件分岐では、複数の条件を組み合わせたいこともあります。たとえば、値が1以上かつ3以下なら有効なメニュー番号としたい場合です。
このようなときは、論理演算子を使います。
| 演算子 | 意味 | 例 |
|---|---|---|
| && | かつ | menu >= 1 && menu <= 3 |
| ! | ではない | !(number == 0) |
たとえば、menu >= 1 && menu <= 3は、menuが1以上で、かつ3以下なら真になります。入力値の範囲チェックでよく使います。
複数条件を使うと、より細かい判断ができるようになります。ただし、条件式が長くなると読みにくくなるため、丸かっこや変数名を工夫して分かりやすく書くことが大切です。
条件分岐でよくあるミス
条件分岐を学ぶときには、いくつかのよくあるミスがあります。特に、=と==の違い、breakの書き忘れ、波かっこの対応には注意しましょう。
| よくあるミス | 内容 |
|---|---|
| =と==を間違える | 等しいかの判定には==を使う |
| breakを書き忘れる | switch文で次のcaseまで実行されることがある |
| 波かっこを閉じ忘れる | if文やswitch文の範囲が崩れる |
| 条件の順番を間違える | else ifで意図しない分岐になる |
| scanfの&を忘れる | 入力値を変数に保存できない |
| 想定外の入力に対応しない | defaultやelseを用意すると安心 |
条件分岐では、構文そのものは短く見えても、条件の意味がとても重要です。プログラムが実行できても、条件の書き方が間違っていると、期待した処理に進まないことがあります。
インデントで分岐の範囲を見やすくする
if文やswitch文では、波かっこの中に処理を書きます。処理の範囲を見やすくするために、インデントを整えることが大切です。
if (score >= 60) {
printf("合格です。\n");
} else {
printf("再確認が必要です。\n");
}このように、波かっこの中を字下げして書くと、どの処理がif文の中にあるのか分かりやすくなります。
switch文でも、caseごとに処理を見やすくそろえると、番号と処理の対応が読み取りやすくなります。
条件分岐を使うと実用的なプログラムに近づく
条件分岐を使えるようになると、プログラムは入力や状態に応じて動きを変えられるようになります。これは、実用的なプログラムを作るうえで欠かせない考え方です。
| 条件分岐でできること | 例 |
|---|---|
| 入力値の判定 | 偶数か奇数かを調べる |
| 点数判定 | 合格、不合格、評価を分ける |
| メニュー処理 | 選ばれた番号に応じて処理を変える |
| エラー処理 | 入力が不正な場合にメッセージを出す |
| 範囲チェック | 値が許可範囲内か確認する |
if文は柔軟な条件判定に向いており、switch文は決まった選択肢による分岐に向いています。どちらもC言語ではよく使うため、サンプルプログラムを実際に入力して、条件を変えながら動きを確認すると理解しやすくなります。
条件分岐の理解は次の学習にもつながる
条件分岐は、C言語の基本構文の中でも特に重要です。変数、演算子、入力処理と組み合わせることで、プログラムの流れを柔軟に制御できます。
今後、繰り返し処理を学ぶと、ループを続ける条件や終了する条件をif文で判断する場面が出てきます。配列や関数を学ぶときにも、値によって処理を変える条件分岐は何度も登場します。
まずは、if文で条件が真のときに処理を実行する流れを理解し、次にelseやelse ifで分岐を広げ、switch文で複数の選択肢を扱えるようにしていきましょう。
条件分岐を使えるようになると、C言語のプログラムは単に上から下へ動くだけではなく、状況に応じて判断しながら動くようになります。ここから、より実用的で柔軟なプログラムへ進んでいけます。
