0

私はループに精通していますが、プロセスをループすることで私は戸惑いました。

ユーザーが非整数を入力した場合、ユーザーが整数を入力するまで、「あなたの年齢」という質問が再度表示されるようにしたいと思います。

 Console.WriteLine("Your age:");
 string line = Console.ReadLine();
 if (!int.TryParse(line, out age))
 {
     Console.WriteLine("{0} is not an integer", line);

 }
4

5 に答える 5

7

試す

int age;

Console.WriteLine("Your age:");
string line = Console.ReadLine();
while (!int.TryParse(line, out age))
{
    Console.WriteLine("{0} is not an integer", line);
    Console.WriteLine("Your age:");
    line = Console.ReadLine();
}

プロセスをループすることの意味がわかりません。ユーザー入力を取得し、その入力を解析しようとしています。

主に、 whiledofor、または(gulp!しないでください!)gotoを使用してこれを実行できます。

于 2012-09-23T08:07:36.847 に答える
6

これを試してみてください。正しい入力が得られるまで「あなたの年齢:」が繰り返されます。

int age;
while(true)
{
    Console.WriteLine("Your age:");
    string line = Console.ReadLine();

    if (!int.TryParse(line, out age))
       Console.WriteLine("{0} is not an integer", line);

    else break;
}
于 2012-09-23T08:09:32.870 に答える
2

私はこのアプローチを使用しました。これによってパフォーマンスが低下するかどうかはわかりませんが、正規表現を使用するのはクールだと思います。これがあなたのためにうまくいくかどうか私に知らせてください

これをTOPに追加

using System.Text.RegularExpressions;

次に、以下を使用します。

            bool bEnteredNumberNotValid = true;
            while (bEnteredNumberNotValid)
            {
                Console.WriteLine("Your age:");
                string sAge = Console.ReadLine();

                string regString = "(^[0-9]+$)"; //REGEX FOR ONLY NUMBERS

                Regex regVal = new Regex(regString, RegexOptions.IgnoreCase | RegexOptions.Singleline); //REGEX ENGINE
                Match matVal = regVal.Match(sAge); //REGEX MATCH WITH THE INPUT
                if (!matVal.Success) // IF THERE IS NO MATCH, SHOW THE BELOW
                {
                    Console.WriteLine("{0} is not an integer", sAge);
                }
                else // ELSE SET bEnteredNumberNotValid FALSE AND GET OUT.
                {
                    bEnteredNumberNotValid = false;
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadLine();
                }
            }

出力!

上記のプログラムの出力を表示するには、ここをクリックしてください

お役に立てれば。

于 2012-09-23T10:00:35.370 に答える
1

私があなたの質問をよく理解しているなら、あなたはただやってみませんか

Console.WriteLine("Your age:");
string line = Console.ReadLine();
while (!int.TryParse(line, out age))
{
    Console.WriteLine("{0} is not an integer", line);
    Console.WriteLine("Your age:");
    line = Console.ReadLine();
}
于 2012-09-23T08:08:08.833 に答える
0

これを実現するための再帰関数しか知りませんが、エラーが発生しやすく、プログラムが非常に複雑になるため、お勧めしません。

クラスで

 string line;
 int age = 0;

メインで

 Console.WriteLine("Your age:");   
 line  = Console.ReadLine();  
 checkFunction();

メソッドを宣言する

public int checkFunction()
{
  if (!int.TryParse(line, out age))
  {
    Console.WriteLine("{0} is not an integer", line);
    line = Console.ReadLine();
    return checkFunction();
  }
  else
  {
    return age;
  }
}
于 2012-09-23T08:11:42.103 に答える