C#の配列とストリングの練習をしています。
プログラムの内容
コンソールアプリです。
1.ユーザーがフォーマットが指定されたモデル名を入力します。
2.入力ミスがあれば、逐一メッセージを表示。(if文)
3.正しく入力されたものは、配列にためられていく。
4.ユーザーが入力を終えたら、exitを入力して終了。
5.その後、ソートされた入力内容がプリントされる
問題点
1.if, else if , else が正常に作動しない!?
★印のelse文が反応せず、配列arrのなかに入力(input)が入らないようです。
if文が複数ある場合は、else ifを使い最後にelseを使うという構文通りに書いたのですが…。
見落としがあるのか自分では見つけられません。
2.★印のif文は、ストリングが空だったら、エラー文章を表示させたいコードなのですが、String.IsNullOrEmptyやその他のstringがnullで書くと、実行時に空エンターして何をやってもクラッシュしてしまいます。
コメント:
配列をプリントアウトしたいのに、配列に書き込めないため、1.が特に問題です。
2.も以前に同じことをやってみて、クラッシュした記憶があります。
ifが複数ある場合、それぞれが独立した扱い。if, else if, elseと続く場合はセットでの流れになっているそうです。
なのですべてのif文に該当しない場合のelse文にしたく、else ifを使ってみたのですがうまくいきません…。
どなたかC#のそういったディテールが得意なかた、ヘルプお願いいたします!
static void Main(string[] args) { bool ok = true; string input; string[] arr = new string[10]; Console.WriteLine("モデル名を入力してください。終了する場合はexitを入力してください."); Console.WriteLine(); while (ok) { for (int i = 0; i < arr.Length; i++) { Console.WriteLine($"Model No. {i + 1} "); Console.Write("モデル名を入力(例. XX-123): "); input = Console.ReadLine(); input = input.Trim(); if (input.ToLower() != "exit") { //以下のif内エラーを想定 if (int.TryParse(input.Substring(0, 1), out _)) { Console.WriteLine($"ハイフンの前はアルファベットで入力してください。"); } else if (!int.TryParse(input.Substring(input.Length - 1, 1), out _)) { Console.WriteLine($"ハイフンの後は数字で入力してください。"); } //★このString.IsNullOrEmptyや、input == nullなどstringがnullになるようなものをif()内でいろいろ試しましたが、実行中何も入力せずにエンターを押すとクラッシュしてしまいます。 else if (String.IsNullOrEmpty(input)) { Console.WriteLine($"空のままにしないでください"); } else if (int.TryParse(input.Substring(input.Length - 3, 3), out _)) { int number = int.Parse(input.Substring(input.Length - 3, 3)); if (number < 200 || number > 500) { Console.WriteLine($"番号は200から500の間で入力してください"); } } else // ★上記if, else ifの条件がすべてfalseだったのであれば、配列にユーザー入力を代入 { arr[i] = input; Console.WriteLine($"{input} が配列arrのインデックス {i} 番に入れられました。"); } } else break; // exitでfor loop終了 } ok = false; // whileの外に出る。 } Array.Sort(arr); Console.WriteLine(); Console.WriteLine("あなたが入力したモデル名は以下になります: "); for (int i = 0; i < arr.Length; i++) { if (arr[i] != null) Console.WriteLine($"* { arr[i].ToUpper()}"); // 合計10個の配列に数少なめに入力して、全てをプリントして観察したら、エレメントは配列の最後に押しつめられるみたいです。pushとかpullとか習ったような…。 } Console.ReadLine(); }
回答3件
あなたの回答
tips
プレビュー