C言語で学ぶネストされたswitch文の基本と実装例
問題
ネストされた(入れ子の)switch文を使用して、入力されたユーザーIDに基づき、ユーザーが入力したパスワードが有効かどうかを判定するCプログラムを作成します。
解決策
解決のポイントは以下のとおりです。
- C言語では、外側のswitch文の中に内側のswitch文を記述できます(ネスト構造)。
- 内側と外側のswitch文のcase値には、同じ値を共通して使用することも可能です。
switch文の基本ルール
- 式が評価され、その結果に基づいて処理が分岐します。
- caseラベルには定数と一意の値を使用しなければなりません。
- caseラベルはコロン(:)で終わる必要があります。
- 各caseにはbreakキーワードを含める必要があります。
- defaultラベルは1つだけしか記述できません。
- 複数のswitch文をネストして記述することができます。
サンプルプログラム
以下は、ネストされたswitch文を使用して、入力されたユーザーIDに基づきパスワードが有効かどうかを判定するCプログラムの例です。
#include <stdio.h>
int main(){
int userid;
int pwd;
printf("enter userid:\n");
scanf("%d",&userid);
switch (userid){
case 1234:
printf("enter password:\n ");
scanf("%d", & pwd);
switch (pwd){
case 0000:
printf("Tutorials Point\n");
break;
default:
printf("incorrect password");
break;
}
break;
default:
printf("incorrect userid");
break;
}
}プログラムの流れ
まず、外側のswitch文がユーザーIDを判定します。IDが「1234」と一致した場合、内側のswitch文に移り、パスワードの入力を求めます。パスワードが「0000」であれば認証成功のメッセージが表示され、それ以外の場合は「incorrect password(パスワードが正しくありません)」と出力されます。ユーザーIDが一致しない場合は、外側のdefaultラベルが実行され、「incorrect userid(ユーザーIDが正しくありません)」と表示されます。
実行結果
プログラムを実行すると、以下のような出力が得られます。
Run 1: enter userid: 1234 enter password: 0000 Tutorials Point Run 2: enter userid: 1234 enter password: 234 incorrect password
まとめ
ネストされたswitch文を使うことで、ユーザーIDの認証後にパスワードの認証へと段階的に処理を分岐させることができます。ただし、ネストが深くなるとコードの可読性が低下するため、実際の開発では適切なインデントやコメントを心がけることが重要です。
-
C言語のネストされたif-else文をわかりやすく解説!構文と実例付き
ネストされたif-else文とは?「ネストされたif(入れ子のif)」とは、if文またはelse文の中に、さらに別のif文が含まれている構造のことを指します。つまり、ある条件分岐の処理ブロック内に、別の条件判断を組み込むことで、より複雑な条件判定を実現できるのです。この仕組みを使うことで、「複数の条件が同時に成り立つかどうか」「段階的な条件チェック」などを、柔軟にプログラムへ組み込むことが可能になります。基本構文ネストされたif-else文の基本的な書き方は以下の通りです。if (condition1){ if (condition2) stmt1; else
-
C言語の単純if文(simple if)をわかりやすく解説
はじめにC言語における「if」キーワードは、論理条件が真(true)と評価された場合にのみ、特定の一連のステートメントを実行するために使用される、最も基本的な条件分岐です。本記事では、単純if文(simple if)の構文、動作の仕組み、そして具体的なサンプルコードを通じてその基本を解説します。構文単純if文の構文は以下の通りです。if (condition) { Statement(s); }単純if文の動作ifブロック内のステートメントは、条件が真(true)の場合にのみ実行され、偽(false)の場合は一切実行されません。条件が真のときに実行したいステートメントが1つだけである場