![](/img/trans.png)
[英]How do I check if user input is in data file C# and display correct message?
[英]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.