[C言語] 0が入力されたらループ処理を終了するプログラムの書き方を解説
C言語でユーザーが0を入力した際にループを終了するプログラムを作成するには、while
ループやdo-while
ループを使用します。
ループ内でscanf
関数を用いてユーザーからの入力を受け取り、その値をチェックします。
入力された値が0である場合、break
文を使用してループを終了します。
この方法により、ユーザーが0を入力するまでループが継続し、0が入力されると即座にループが終了します。
- while、do-while、forループの基本的な構文と使い方
- 0が入力された際にループを終了する方法
- 入力値のバリデーションや複数の終了条件の設定方法
- ループ内での計算処理やネストされたループの活用法
- ループ処理におけるメモリ管理の注意点
whileループを使った基本的な例
C言語におけるwhileループは、条件が真である限り繰り返し処理を行うための基本的な制御構造です。
ここでは、whileループの基本的な構文と、特定の条件でループを終了する方法について解説します。
whileループの構文
whileループの基本的な構文は以下の通りです。
#include <stdio.h>
int main() {
// 変数の宣言
int condition = 1;
// whileループの開始
while (condition) {
// ループ内の処理
printf("ループ内の処理を実行中\n");
// 条件を更新する処理
condition = 0; // 例として、ループを1回で終了させる
}
return 0;
}
この構文では、condition
が真(0以外の値)である限り、ループ内の処理が繰り返されます。
condition
が偽(0)になると、ループは終了します。
0が入力されたら終了するwhileループの実装
ユーザーからの入力を受け取り、0が入力されたらループを終了するプログラムを実装してみましょう。
#include <stdio.h>
int main() {
int input;
// ユーザーからの入力を受け取る
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
// whileループの開始
while (input != 0) {
// 入力された整数を表示
printf("入力された整数は %d です\n", input);
// 再度ユーザーからの入力を受け取る
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
}
printf("プログラムを終了します\n");
return 0;
}
整数を入力してください(0で終了):5
入力された整数は 5 です
整数を入力してください(0で終了):3
入力された整数は 3 です
整数を入力してください(0で終了):0
プログラムを終了します
このプログラムでは、ユーザーが0を入力するまで、入力された整数を表示し続けます。
0が入力されると、ループが終了し、プログラムも終了します。
無限ループからの脱出方法
無限ループは、条件が常に真であるために終了しないループのことです。
無限ループを意図的に作成することもありますが、通常はbreak
文を使って脱出します。
#include <stdio.h>
int main() {
int input;
// 無限ループの開始
while (1) {
// ユーザーからの入力を受け取る
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
// 0が入力されたらループを終了
if (input == 0) {
break;
}
// 入力された整数を表示
printf("入力された整数は %d です\n", input);
}
printf("プログラムを終了します\n");
return 0;
}
整数を入力してください(0で終了):7
入力された整数は 7 です
整数を入力してください(0で終了):2
入力された整数は 2 です
整数を入力してください(0で終了):0
プログラムを終了します
このプログラムでは、while (1)
によって無限ループを作成し、input
が0の場合にbreak
文でループを終了します。
これにより、意図的にループを制御することができます。
do-whileループを使った例
do-whileループは、少なくとも一度はループ内の処理を実行することを保証する制御構造です。
ここでは、do-whileループの基本的な構文と、特定の条件でループを終了する方法について解説します。
do-whileループの構文
do-whileループの基本的な構文は以下の通りです。
#include <stdio.h>
int main() {
int condition = 1;
// do-whileループの開始
do {
// ループ内の処理
printf("ループ内の処理を実行中\n");
// 条件を更新する処理
condition = 0; // 例として、ループを1回で終了させる
} while (condition);
return 0;
}
この構文では、do
ブロック内の処理が少なくとも一度は実行され、その後にwhile
の条件が評価されます。
条件が真であれば、再びdo
ブロックが実行されます。
0が入力されたら終了するdo-whileループの実装
ユーザーからの入力を受け取り、0が入力されたらループを終了するプログラムを実装してみましょう。
#include <stdio.h>
int main() {
int input;
// do-whileループの開始
do {
// ユーザーからの入力を受け取る
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
// 入力された整数を表示
if (input != 0) {
printf("入力された整数は %d です\n", input);
}
} while (input != 0);
printf("プログラムを終了します\n");
return 0;
}
整数を入力してください(0で終了):8
入力された整数は 8 です
整数を入力してください(0で終了):4
入力された整数は 4 です
整数を入力してください(0で終了):0
プログラムを終了します
このプログラムでは、ユーザーが0を入力するまで、入力された整数を表示し続けます。
0が入力されると、ループが終了し、プログラムも終了します。
do-whileループの利点と注意点
利点
- 少なくとも一度は実行される: do-whileループは、条件が最初に評価される前にループ内の処理が実行されるため、少なくとも一度は処理が行われることが保証されます。
- ユーザー入力に適している: ユーザーからの入力を受け取る際に、少なくとも一度は入力を促す必要がある場合に便利です。
注意点
- 条件の評価タイミング: 条件がループの最後に評価されるため、条件が偽であっても一度はループが実行されることを考慮する必要があります。
- 無限ループのリスク: 条件が常に真である場合、無限ループになる可能性があるため、条件の設定には注意が必要です。
do-whileループは、特定の状況で非常に便利ですが、使用する際にはその特性を理解して適切に活用することが重要です。
forループを使った例
forループは、繰り返し処理を行う際に、初期化、条件チェック、更新処理を一つの行で記述できる便利な制御構造です。
ここでは、forループの基本的な構文と、特定の条件でループを終了する方法について解説します。
forループの構文
forループの基本的な構文は以下の通りです。
#include <stdio.h>
int main() {
// forループの開始
for (int i = 0; i < 5; i++) {
// ループ内の処理
printf("ループ内の処理を実行中: %d\n", i);
}
return 0;
}
この構文では、for
の中に初期化、条件、更新処理を記述します。
i
が5未満である限り、ループ内の処理が繰り返されます。
0が入力されたら終了するforループの実装
通常、forループは回数が決まっている場合に使用されますが、条件を工夫することで、ユーザーの入力に応じてループを終了することも可能です。
#include <stdio.h>
int main() {
int input;
// forループの開始
for (;;) { // 無限ループを作成
// ユーザーからの入力を受け取る
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
// 0が入力されたらループを終了
if (input == 0) {
break;
}
// 入力された整数を表示
printf("入力された整数は %d です\n", input);
}
printf("プログラムを終了します\n");
return 0;
}
整数を入力してください(0で終了):9
入力された整数は 9 です
整数を入力してください(0で終了):6
入力された整数は 6 です
整数を入力してください(0で終了):0
プログラムを終了します
このプログラムでは、for (;;)
を使って無限ループを作成し、input
が0の場合にbreak
文でループを終了します。
これにより、ユーザーの入力に応じてループを制御することができます。
forループでの条件チェックの工夫
forループは通常、回数が決まっている場合に使用されますが、条件を工夫することで柔軟に使用することができます。
条件チェックの工夫
- 無限ループの利用:
for (;;)
を使って無限ループを作成し、break
文で条件に応じてループを終了する方法があります。
これにより、ユーザーの入力や他の条件に応じてループを制御できます。
- 複数の終了条件:
for
の条件部分に複数の条件を組み合わせることで、より複雑な終了条件を設定することができます。
例:for (int i = 0; i < 10 && input != 0; i++)
。
forループは、初期化、条件、更新処理を一行で記述できるため、コードを簡潔に保つことができます。
条件を工夫することで、さまざまな状況に対応したループを作成することが可能です。
応用例
C言語のループ処理を応用することで、より複雑で実用的なプログラムを作成することができます。
ここでは、いくつかの応用例を紹介します。
入力値のバリデーションを追加する
ユーザーからの入力が正しい形式であることを確認するために、入力値のバリデーションを追加することができます。
#include <stdio.h>
int main() {
int input;
while (1) {
printf("正の整数を入力してください(0で終了):");
if (scanf("%d", &input) != 1 || input < 0) {
printf("無効な入力です。もう一度入力してください。\n");
// 入力バッファをクリア
while (getchar() != '\n');
continue;
}
if (input == 0) {
break;
}
printf("入力された整数は %d です\n", input);
}
printf("プログラムを終了します\n");
return 0;
}
このプログラムでは、ユーザーが正の整数を入力するまで、再入力を促します。
無効な入力があった場合、エラーメッセージを表示し、入力を再度求めます。
複数の終了条件を設定する
ループを終了するために、複数の条件を設定することができます。
#include <stdio.h>
int main() {
int input;
int count = 0;
while (count < 5) {
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
if (input == 0) {
break;
}
printf("入力された整数は %d です\n", input);
count++;
}
printf("プログラムを終了します\n");
return 0;
}
このプログラムでは、ユーザーが0を入力するか、5回入力が行われるとループが終了します。
ループ内での計算処理を行う
ループ内で計算処理を行い、結果を出力することができます。
#include <stdio.h>
int main() {
int input;
int sum = 0;
while (1) {
printf("整数を入力してください(0で終了):");
scanf("%d", &input);
if (input == 0) {
break;
}
sum += input;
printf("現在の合計は %d です\n", sum);
}
printf("最終的な合計は %d です\n", sum);
return 0;
}
このプログラムでは、ユーザーが入力した整数の合計を計算し、入力のたびに現在の合計を表示します。
ループのネストと終了条件
ループをネストして、複雑な処理を行うことができます。
#include <stdio.h>
int main() {
int outer, inner;
for (outer = 1; outer <= 3; outer++) {
printf("外側ループ: %d\n", outer);
for (inner = 1; inner <= 2; inner++) {
printf(" 内側ループ: %d\n", inner);
}
}
return 0;
}
このプログラムでは、外側のループが3回、内側のループが2回実行されます。
ネストされたループを使うことで、より複雑な処理を行うことができます。
ユーザーに終了確認を求める
ループを終了する前に、ユーザーに確認を求めることができます。
#include <stdio.h>
int main() {
int input;
char confirm;
while (1) {
printf("整数を入力してください:");
scanf("%d", &input);
printf("入力された整数は %d です。終了しますか?(y/n):", input);
scanf(" %c", &confirm);
if (confirm == 'y' || confirm == 'Y') {
break;
}
}
printf("プログラムを終了します\n");
return 0;
}
このプログラムでは、ユーザーが整数を入力した後、終了するかどうかを確認します。
ユーザーが’y’または’Y’を入力した場合にループを終了します。
よくある質問
まとめ
C言語のループ処理は、さまざまな方法で応用できる強力なツールです。
この記事では、while、do-while、forループの基本的な使い方から応用例までを解説しました。
これらの知識を活用して、より効率的で柔軟なプログラムを作成してみてください。