ロブ・マイルズのC#Programming Yellow Bookと彼のウェブサイトからの関連するラボ演習を使用してC#の学習を始めました。私はそれらの1つを行い、動作する解決策を作りました...(提供されていません)。ユーザーが無意味な答えや整数に変換できない文字列を入力した場合、私はクラッシュしないようにしたいと考えていました(私はこれをGoogledし、TryParseメソッドを見つけました。ユーザインタフェースにとって有用である、すなわち、悪い入力の後にプログラムを続行させる)。私はまた、これらのケースの1つで、代替メッセージを送信するように設定しました。私はやや長いコードで終了しました... do/do中/ whileとwhile/do/whileはしばらくしています。これを合理化するためのヒントがあれば、私は多くの義務があります。 C#:入力コンソールによるエラー防止の最適化
ベスト
、 エリオットusing System;
using System.IO;
static class Cinema
{
static void Main()
{
int[] selection = new int[] //array for the age requirements of each film
{
15, 15, 12, 18, 0
};
string filmNumberText; //console input for the film number
int filmNumber; //input string parsed as integer
string ageText; //console input for age
int age; //parsed age string
int ageLimit; //age requirement for selected film
Console.Write("Welcome to our Multiplex.\n\n");
Console.WriteLine(@"We are presently showing:
1. Rush (15)
2. How I Live Now (15)
3. Thor: The Dark World (12A)
4. Filth (18)
5. Planes (U)");
do //loops as long as input is not between 1 and 5
{
do //loops as long as the input is not an integer
{
Console.Write("\nEnter the number of the film you wish to see: ");
filmNumberText = Console.ReadLine();
}
while (int.TryParse(filmNumberText, out filmNumber) == false);
} while (filmNumber < 1 || filmNumber > 5);
filmNumber = filmNumber - 1; //changes input from 1-5 to 0-4
ageLimit = selection[filmNumber]; //selects age requirement from array
//loops as long as input is not an integer
do
{
Console.Write("\nEnter your age: ");
ageText = Console.ReadLine();
} while (int.TryParse(ageText, out age) == false); // repeats if input is not an integer
while (age < 0 || age > 125) //if integer is is too small or too large...
{
do
{
Console.Write("\nInvalid age. Please enter an age between 0 and 125: ");
ageText = Console.ReadLine();
} while (int.TryParse(ageText, out age) == false); //check again if input is an integer
}
if (age < ageLimit) //if too young for the given film
{
Console.WriteLine("\nAccess denied - you are too young");
}
else
{
Console.WriteLine("\nPlease call our office at 888-999-2928 to reserve tickets.");
}
}
}
の作業コード://codereview.stackexchange.comですが、入力が無効な場合は、メッセージを追加します。また、コードをメソッドに分割して、必要に応じてよりきれいにすることもできます。 –
これは実際にはかなり良いです。多くの反復コードがあるので、私が行う改善は、再利用できる別の方法にその一部を移動することです。これは彼の答えで@ user3598756がしたことです。そうすれば、コードが短くなり、間違いを起こす可能性の少ない場所(バグ)になります。 –