2016-03-23 5 views
0

番目のステートメントに移動する前に最初の文を3回ループこれを行う-ながら、C#でコンソールアプリでループ:C#のループは、私が書いてきた

do 
{ 
    ThisHelp.ShowMenu(); 
    userChoice = (char) Console.Read(); 
    ThisHelp.Helpon(userChoice); 
}while(ThisHelp.IsValid(userChoice) == false); 

書き込み+ WriteLineメソッドのちょうど束を持っているThisHelp.ShowMenu()方法メソッドには、ユーザーに1から8までの数値を入力するよう要求されます。 メソッドThisHelp.Helpon()には、渡されたユーザー入力に応じて異なるテキストが表示されるスイッチがあります。 だけユーザ入力が1から8

の数がここで問題だされていることを確認ThisHelp.IsValid方法:ユーザが番号を書き込み、プレスが入力すると、ループの最初の文は、第二の文を実行する前に3回実行少なくとも一度は。なぜこうなった?

編集:

public bool IsValid(char ch) 
{ 
    if (ch < '1' | ch > 8 & ch != 'q') return false; 
    else return true; 
} 
+0

をあなたは代わりに ''(文字)Console.Read() ' –

+0

いけないのあなたが'実行する前に入力を検証する必要が 'int.Parse(Console.ReadLine())を使用する必要がありますThisHelp.Helpon(userChoice); 'メソッド? – DCruz22

+0

@ DCruz22ユーザが無効な文字を入力した場合、 'ThisHelpon(userChoice);'メソッドは何も出力せず、実行が意図したとおりにループから飛び出します。私は別のやり方でそれを行うことができましたが、演習ではdo-whileループを使用する必要がありました。 –

答えて

5

問題は、Console.Read()のすべての文字を返します。ユーザーが入力します。あなたはむしろ使用すること

  • 8
  • \r(キャリッジリターン)と
  • \n(改行)

:彼は8に入るのであれば、その後プレスは、次の3つの文字を取得をENTERこれは:

char userChoice = Console.ReadLine().Trim()[0]; 

しかし、空の入力にはエラー処理を追加してください。

6

Console.Read()一般のみ戻り、ユーザがリターンを押したとき - れるがされるキャリッジ・リターンおよび改行を指す:要求としてここThisHelp.IsValidメソッドのコードは、ありますその後のConsole.Read()の呼び出しで返されました。各反復でuserChoiceの値をログに記録する(またはデバッガで調べる)ことにより、検証できます。

Console.ReadLine()を呼び出すだけで、行全体を消費し、その値を整数に変換する方が簡単かもしれません。

+0

ありがとう、これは働いた。しかし、他の答えも受け入れました。なぜなら、それはあまり効果がありましたが、キーストロークは少なかったからです。例えば、私は、型のchar型からint型へのメソッドのパラメータのdeclerationを変更する必要があるだろう... –

0

ループの2番目の2行を1つにまとめることができます。このような何か試してみてください:

ThisHelp.Helpon(Char.Parse(Console.Readline())); 
関連する問題