2016-08-17 47 views
1

我試圖寫如果文本(除數字以外的任何東西)鍵入它顯示錯誤消息,它不是數字,並要求用戶再次鍵入行。基於文本或數字輸入顯示的C#錯誤消息

而且我已經植入這個數字必須爲20或更高的正常工作,並當過用戶輸入小於20它顯示錯誤消息,並再次詢問用戶..

,所以我的問題是,它顯示錯誤信息包括小於20的文字和文字。

那麼如何讓else語句顯示不同的消息,如果文本是類型而不是數字?

static double InputFuel() { 
    double fFuel; 
    string text; 
    bool badValue = true; 

    Console.Write("Enter amount of fuel used in litres : "); 
    //Check if fule entered is greater than 20, if not ask again 
    do { 

     text = Console.ReadLine(); 
     if (double.TryParse(text, out fFuel) && fFuel >= 20) { 
      badValue = false; 
     } 

     else { 
      Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
      Console.Write("Please re-enter a number greater than 20 : "); 
     } 
    } while (badValue); 
    return fFuel; 
}//end InputFuel 

我想是這樣的,但是不工作

 else (!int.TryParse(text, out num) { 
      Console.WriteLine("\n\t {0} is not a number \n\n", text); 
     } 
+0

您的代碼「按原樣」,我複製並粘貼 - 檢查此.NET小提琴https://dotnetfiddle.net/DrzNMb –

回答

3

首先,如果輸入的是數字我會檢查和之後,如果數量大於20

static double InputFuel() { 
    double fFuel; 
    string text; 
    bool badValue = true; 

    Console.Write("Enter amount of fuel used in litres : "); 
    //Check if fule entered is greater than 20, if not ask again 
    do { 

     text = Console.ReadLine(); 
    if (!double.TryParse(text, out fFuel) { 
      Console.WriteLine("\n\t {0} is not a number \n\n", text); 
     } 

     else if (fFuel >= 20) { 
      badValue = false; 
     } 

     else { 
      Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
      Console.Write("Please re-enter a number greater than 20 : "); 
     } 
    } while (badValue); 
    return fFuel; 
}//end InputFuel 
+0

謝謝,添加console.write與您的代碼奇妙地工作^^ – lufee

0

您可以修改你目前的狀況是嵌套像下面

if (double.TryParse(text, out fFuel)) { 
     if(fFuel >= 20) badValue = false; 
     else { 
     Console.WriteLine("\n\t {0} is below the minimum value of 20 \n\n", text); 
     Console.Write("Please re-enter a number greater than 20 : "); 
     } 
    } 
    else { 
     Console.WriteLine("\n\t {0} is not a number \n\n", text); 
    } 
0

如果你正在尋找驗證您可以創建一個結構或類,將做驗證,並提供一些關於它的信息的用戶輸入的「更高級」或「更多的企業像」方式:

class InputValidator 
{ 
    public string Input { get; set; } 
    public bool IsValidInput { get; set; } 
    public bool IsAboveThreshHold { get; set; } 
    public bool IsNumber { get; set; } 
    public double Litres { get; set; } 

    public ValidationResult() { } 

    public ValidationResult(string text) 
    { 
     double litres; Input = text; 
     if (double.TryParse(text, out litres)) 
     { 
      Litres = litres; 
      IsAboveThreshHold = litres > 20; 
      IsNumber = true;     
     } 

     IsValidInput = IsNumber && IsAboveThreshHold; 
    } 

    public void ShowErrorMessage() 
    { 
     if (!IsNumber) 
     { 
      Console.WriteLine($"\n\t {Input} is not a valid number \n\n"); 
      Console.Write("Please re-enter a number greater than 20 : ");     
      return; 
     } 
     if(!IsAboveThreshHold) 
     { 
      Console.WriteLine($"\n\t {Input} is below the minimum value of 20 \n\n"); 
      Console.Write("Please re-enter a number greater than 20 : "); 
     } 
    } 
} 

並且很容易地使用這個類:

static double InputFuel() 
    { 
     var result = new InputValidator(); 

     Console.Write("Enter amount of fuel used in litres : "); 

     //Check if fule entered is greater than 20, if not ask again 
     while (!result.IsValidInput) 
     { 
      result = new InputValidator(Console.ReadLine()); 

      if (!result.IsValidInput) result.ShowErrorMessage();      
     } 
     return result.Litres; 
    } 

PS 雖然在簡單的情況下,這將是一種矯枉過正,但在更復雜的情況下,這在企業項目中很常見,這種方法要好得多。