1

ユーザーに (Y/N) と言うように求めるコマンド ラインがあり、この値が checkResponse メソッドに渡されます。

何らかの理由で、デバッグ時に値が「Y」であるにもかかわらず、while ループが値を無視します。値が「N」に設定されている場合も、ループし続けます。if ステートメントを while ステートメントの下に移動すると、プログラムは途中で機能します。「Y」の初期値を送信すると、while ステートメントはそれを無視し、その中のコードの実行を開始します。

私が見逃している、または見落としているものは何か分かりますか?

前もって感謝します。

public void checkResponse(string response, string confirmValue)
{
    Console.WriteLine(response);
    Console.WriteLine(response);
    if (response == "Y")
    {
        return;
    }
    else if (response == "N")
    {
        Environment.Exit(0);
    }
    else
    {
        while ((response != "Y") || (response != "N"))
        {
            Console.Clear();
            Console.WriteLine("\"" + response + "\" is not a valid response.");
            Console.WriteLine();
            Console.WriteLine("You entered:" + confirmValue);
            Console.WriteLine("Is this correct? (Y/N)");
            response = Console.ReadLine().ToUpper();
        }
    }
}
4

5 に答える 5

11

ORからAND論理演算子に変更します。

(response != "Y") && (response != "N")
于 2012-07-25T13:19:15.933 に答える
4

あなた((response != "Y") || (response != "N"))はいつもtrue

于 2012-07-25T13:19:35.030 に答える
3
while ((response != "Y") || (response != "N"))

応答が同時に Y と N になることはできないため、常に true になります。

于 2012-07-25T13:19:31.190 に答える
0

Ok。whileループが終了した場合はどうなりますか?もう一度確認するために戻ってほしい:

public void checkResponse(string response, string confirmValue)
{
Check:
    Console.WriteLine(response);
    Console.WriteLine(response);
    if (response == "Y")
    {
        return;
    }
    else if (response == "N")
    {
        Environment.Exit(0);
    }
    else
    {
        while ((response != "Y") && (response != "N"))
        {
            Console.Clear();
            Console.WriteLine("\"" + response + "\" is not a valid response.");
            Console.WriteLine();
            Console.WriteLine("You entered:" + confirmValue);
            Console.WriteLine("Is this correct? (Y/N)");
            response = Console.ReadLine().ToUpper();
        }
        goto Check;
    }
}

または、より良い:

public void checkResponse(string response, string confirmValue)
{
    Console.WriteLine(response);
    while (response != "Y" && response != "N")
    {
            Console.Clear();
            Console.WriteLine("\"" + response + "\" is not a valid response.");
            Console.WriteLine();
            Console.WriteLine("You entered:" + confirmValue);
            Console.WriteLine("Is this correct? (Y/N)");
            response = Console.ReadLine().ToUpper();
    }
    if (response == "N")
           Environment.Exit(0);
}
于 2012-07-25T13:21:17.493 に答える
0

入力も大文字でよろしいですか?equalsメソッドを使用して、大文字と小文字を区別することはできません。

message.Equals("Y", StringComparison.InvariantCultureIgnoreCase);

編集:これは、andの代わりにorを使用したエラーには適している場合がありますが、実際の問題です。

于 2012-07-25T13:21:57.003 に答える