モンティ ホール問題をシミュレートするコマンド ライン C プログラムを作成していますが、コードの特定のセクションで問題が発生しています。このプログラムでは、ユーザーが開きたいドアの番号を入力するように単にプロンプトが表示され、入力が取得されます。そして、それが有効であることを確認します:
printf("Please enter the door you would like to choose! (Door 1, 2 or 3)\n\nDoor ");
char init_input[255];
int selection;
int valid_input = 0;
while(valid_input == 0)
{
gets(init_input);
int len = strlen(init_input);
while(len != 1)
{
printf("Please choose either door 1, 2 or 3\n\n");
printf("Door ");
gets(init_input);
len = strlen(init_input);
}
int valid_input = 0;
char input = init_input[0];
switch(input)
{
case('1'):
{
selection = 1;
valid_input = 1;
printf("Door 1\n");
break;
}
case('2'):
{
selection = 2;
valid_input = 1;
printf("Door 2\n");
break;
}
case('3'):
{
selection = 3;
valid_input = 1;
printf("Door 3\n");
break;
}
default:
{
printf("\nPlease choose either door 1, 2 or 3\n\nDoor ");
break;
}
}
}
printf("\nYou chose Door %d, now I will reveal one of the doors that has a goat behind it:\n\n", selection);
有効なドア番号 (1、2、または 3) のいずれかを入力するまで、プログラムは正常に動作します。クラッシュはしませんが、while ループの後に目的の出力を出力せず、プログラムを続行します。ただし、有効な番号を入力すると、選択したドアの名前が出力されます。これは、switch ステートメントとは関係がないことを示唆しています。