簡體   English   中英

如何檢查用戶輸入是否不是數字,然后在 C# 中顯示消息?

[英]How to check if user input is not a number and then display a message in C#?

所以這是我自學的第二天,我敢肯定這是一個非常初學者的問題,但是查找我使用 typeof 或 tryparse 找到的東西,但我似乎無法弄清楚如何使用它們。 在這個學習階段,我可能不應該嘗試這個,但我想我還是會問,因為我真的很想知道如何去做。 我正在關注一個教程,但它不包括用戶輸入不是數字的情況。 這是我的基本計算器:

using System;

namespace Tutorials
{
    class Program
    {
        static void Main(string[] args)
        {
            string opError = "Invalid Operator";
            string numError = "Enter a valid number";

            Console.Write("Enter a number: ");
            double num1 = Convert.ToDouble(Console.ReadLine());

            Console.Write("Enter Operator: ");
            string op = Console.ReadLine();

            Console.Write("Enter a number: ");
            double num2 = Convert.ToDouble(Console.ReadLine());


            if (op == "+")
            {
                Console.WriteLine(num1 + num2);
            }
            else if (op == "-")
            {
                Console.WriteLine(num1 - num2);
            }
            else if (op == "/")
            {
                Console.WriteLine(num1 / num2);
            }

            else if (op == "*")
            {
                Console.WriteLine(num1 * num2);
            }
            else
            {
                Console.WriteLine(opError);
            }

            Console.ReadLine();
        }


    }
}

我希望能夠檢查 num1 和 num2 的用戶輸入是否是數字,如果不是,我希望它顯示我為 numError 設置的消息。 現在 if 和 else 語句對我來說很有意義,因為我知道正在使用的運算符。 當涉及到用戶輸入時,它可以是任何東西。 這就是我對如何 go 這樣做感到困惑的地方。 我閱讀了關於 typeof 和 tryparse 的內容,但我不太明白如何在這段代碼中使用它們。 我用 tryparse 嘗試過,但是一旦我輸入了一個數字,它就什么也不做,所以我假設我需要一個 if 語句,我一開始還是知道如何做到這一點。 使用我的代碼執行此操作的最佳方法是什么? 我看到有更好的方法來做這個計算器,我看過一些例子,但我正試圖用我目前的方式來理解它。

一種解決方案是使用double.TryParse ,它返回輸入是否為有效數字,並且可以在 do...while 循環中使用,如下所示:

double num1 = 0;
do {
    Console.WriteLine("Enter a number:");
} while(!double.TryParse(Console.ReadLine(), out num1));

它告訴計算機繼續提示用戶輸入,直到解析成功,即你得到一個有效的數字。

這種方法的問題之一是它沒有告訴用戶出了什么問題,只是繼續輸入數字。 但它相對簡單,最后你總會得到一個數字。


使用double.TryParse和循環的另一種方法是:

double num1 = 0;
while (true) {
    Console.WriteLine("Enter a number:");
    if (double.TryParse(Console.ReadLine(), out num1) {
        // if the parse was successful, we can break out of the loop
        break;
    } else {
        // if the parse was unsuccessful, display an error message and try again
        Console.WriteLine("Invalid number. Try again.");
    }
}

這個版本更復雜,但它會告訴用戶出了什么問題,IMO 更易讀,而且最后總是會得到一個數字。

編輯:添加了第二個版本 - 謝謝@Tomek

不要使用用於在數字類型之間轉換的Convert.ToDouble() ,而應該使用將字符串解析為數字的double.TryParse() ,例如"1.234"1.234

請參閱下面的示例

class Program
{
    static void Main(string[] args)
    {
        var input = Console.ReadLine();
        if (double.TryParse(input, out double value))
        {
            // use 'value'
        }
        else
        {
            Console.WriteLine("Please enter a valid number.");
        }
    }
}

只需使用它:

string c = Console.ReadLine();
int value;
if (int.TryParse(c, out value)) 
{ /* some code here */ }

正如您已經發現的那樣,有很多方法可以解決這個問題。 但是,如果您還沒有准備好,我不建議您使用 TryParse() 之類的方法。

因為您將重點放在 if-else-statement 上,所以我認為最好的解決方案是使用 try-和 catch-statement 處理輸入,因為它與 if-else-statement 非常相似。

所以您可能知道,如果您嘗試將字符串轉換為數字數據類型(如 int 或 double),您會收到錯誤消息。

int number = Convert.ToInt32("some text"); //this will cause an error

但實際上這是確定輸入值是否為數字的完美方法。 現在使用 try-catch-statement,您可以檢測指令是否會導致錯誤而不會導致程序崩潰。

try 
{ 
   //some code
}
catch 
{
   //this code will be executed when the code above would result in an error
}

也許你看到了 if-else-statement 的一些相似之處。 就像,如果 try-block 中的代碼導致錯誤,catch-block 將被執行,否則 try-block 本身。

因此,您可以嘗試將用戶輸入轉換為數字。 如果輸入是字符串,您可以使用 catch 語句 output 出現錯誤消息:

string input = Console.Readline();
double number = 0;
double defaultValue = 1;

try
{
   number = Convert.ToDouble(input);
}
catch
{
   Console.WriteLine(numError);
   number = defaultValue;
}

例如,您也可以不使用默認值,而是循環輸入,直到用戶輸入有效數字或結束程序,但我認為現在就足夠了 =)

try 和 catch 是非常有用的語句,你將來仍然會使用它們!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM