前回は、「鶴亀算」を鶴と亀の数の合計と足の合計をユーザーが入力し、それに基づいて鶴と亀の数を自動で計算して出力するプログラムをご紹介した。
今回は、このプログラムを、入力チェックを追加し、負の値や不適切な入力に対応できるように改良してみよう。
//鶴亀算プログラム(第3版)
#include <stdio.h>
int main(void)
{
int total_animals, total_legs;
int cranes, turtles;
int found = 0;
// 合計の鶴と亀の数の入力とチェック
printf("鶴と亀の合計の数を入力してください: ");
if (scanf("%d", &total_animals) != 1 || total_animals < 0) {
printf("エラー: 合計の数には0以上の整数を入力してください。\n");
return 1;
}
// 鶴と亀の足の合計本数の入力とチェック
printf("足の合計本数を入力してください: ");
if (scanf("%d", &total_legs) != 1 || total_legs < 0) {
printf("エラー: 足の合計には0以上の整数を入力してください。\n");
return 1;
}
// 鶴と亀の組み合わせ探索
for (cranes = 0; cranes <= total_animals; cranes++) {
turtles = total_animals - cranes;
if ((2 * cranes + 4 * turtles) == total_legs) {
printf("鶴の数: %d羽\n", cranes);
printf("亀の数: %d匹\n", turtles);
found = 1;
break;
}
}
if (!found) {
printf("条件に合う鶴と亀の組み合わせはありません。\n");
}
return 0;
}
実行結果
鶴と亀の合計の数を入力してください: 200
足の合計本数を入力してください: 468
鶴の数: 166羽
亀の数: 34匹
改良点
- scanf の戻り値で数値が正しく入力されたかどうかを確認する
- 負の値が入力された場合はエラーメッセージを出して終了する。
- 条件に合わない場合には、わかりやすいメッセージを出力する。
コメント