-4

単純なコードに問題があります。私がやりたいことは次のとおりです。たとえば、ユーザーが負の数のみを与え、正ではない場合、私は見たいです:

"this is not valid"

Do you want to try again <y/n>?

私はすでにif、if elseとの多くの組み合わせを試しましたが、それが表示されない"do you want to try again?"か、両方と結果が表示されます。

これは無効です。最大値は次のとおりです: 0

それはよくありません。

int invoer;
int max;
string repeat;

Console.WriteLine("Please give a positive number.\nIf you enter a negative number its not going to work");

do
{
    invoer = 0;
    max = 0;
    repeat = "";

    for (int i = 1; invoer >= 0; i++)
    {
        Console.Write(i + "> ");
        invoer = int.Parse(Console.ReadLine());

        if (max < invoer)
            max = invoer;
    }

    Console.WriteLine("Maximum value is: " + max);
    Console.WriteLine("do you want to try again? y/n: ");
    repeat = Console.ReadLine();
} while (repeat == "y" || repeat == "Y");
4

3 に答える 3

2

このコードを編集しました。正の値が何であるかを無制限にユーザーに尋ねます。入力された値が最大値である場合にのみ、最大値が表示されます。値が負の場合、最大値は得られません...これがあなたが望むものだと思いますか?

ただし、このコードはひどいものです。私はそれでできることを修正しました。それがあなたが探しているものではない場合は、それを破棄して新しく始めるだけです。これの動作方法の醜さにより、本来よりも実行が難しくなるからです。

これが答えである場合は、チェックしてください。

    int invoer;
    int max;
    string repeat;

    Console.WriteLine("Please give a positive number.\nIf you enter a negative number its not going to work");

    do
    {
        invoer = 0;
        max = 0;
        repeat = "";

        for (int i = 0; invoer >= 0; i++)
        {
            Console.Write(i + "> ");
            invoer = int.Parse(Console.ReadLine());

            if (max < invoer)
            {
                max = invoer;
                Console.WriteLine("Maximum value is: " + max);
            }
        }

        if (invoer < 0)
        {
            Console.WriteLine("This is not valid...");
        }


        Console.WriteLine("do you want to try again? y/n: ");
        repeat = Console.ReadLine();
    } 
    while (repeat == "y" || repeat == "Y");
}
}
}
于 2013-10-26T19:49:58.357 に答える
0

int.TryParse を使用できない場合は、解析する前に入力が数値であることを常に確認できます。

var input = Console.ReadLine();
var number = !string.IsNullOrWhiteSpace(input) ? input : "0";

var numeralExpression = new System.Text.RegularExpressions.Regex(@"^(\d|-\d)$");

if (numeralExpression.IsMatch(number))
{
    invoer = int.Parse(number);
}
于 2013-10-26T19:27:48.357 に答える
0

int.Parse の代わりに uint.TryParse を使用する必要があります。負の数を受け入れず、無効な入力に対して例外をスローしません。

于 2013-10-26T15:43:45.037 に答える