2012-09-27 50 views
1

我正在使用Integer.TryParse方法驗證用戶輸入是數字還是非數字在我的程序中。 1)如果用戶輸入是數字,程序將繼續並驗證用戶輸入的範圍是從0到9. 2)如果用戶輸入非數字輸入,程序將顯示消息「無效輸入「並要求用戶從頭開始。VB2008控制檯應用程序 - Integer.TryParse方法錯誤

以下是我的編碼: 子的Main()

Dim sevenNumbers As Integer() 
    sevenNumbers = New Integer(6) {} 
    Dim index As Integer 
    Dim number As Integer 
    Dim reEnter As Boolean = True 

    Console.WriteLine("Please enter 7 integers: ") 
    Console.WriteLine("<ATTENTION: FROM 0 TO 9 ONLY>") 
    Console.WriteLine() 

    While reEnter 
     For index = 0 To 6 

      Console.WriteLine("Please enter the integer no." & "{0}" & " : ", index + 1) 'Prompt user to enter 7 integers. 
      sevenNumbers(index) = Console.ReadLine() 'The 7 integers are stored in an array. 

      If Integer.TryParse(sevenNumbers(index), number) Then 
       While sevenNumbers(index) < 0 Or sevenNumbers(index) > 9 
        Console.WriteLine("<invalid input>") 
        Console.WriteLine() 
        Console.WriteLine("------------------------------------------") 
        Console.WriteLine("<Please re-enter the 7 integers>") 
        Console.WriteLine("------------------------------------------") 
        Console.WriteLine() 
        reEnter = True 
        Exit For 
       End While 

      Else 
       Console.WriteLine("<invalid input>") 
       Console.WriteLine() 
       Console.WriteLine("------------------------------------------") 
       Console.WriteLine("<Please re-enter the 7 integers>") 
       Console.WriteLine("------------------------------------------") 
       Console.WriteLine() 
       reEnter = True 
       Exit For 

      End If 

      reEnter = False 

     Next 
    End While 

末次

然而,當用戶輸入一個非數字輸入,程序無法繼續,並顯示一個錯誤,被迫關閉。

我想這

子的Main() 昏暗NUM爲整數

Console.Write("enter num:") 
    Dim input = Console.ReadLine 

    If Integer.TryParse(input, num) Then 
     Console.WriteLine("valid. num = " & num) 
    Else 
     Console.WriteLine("invalid") 
    End If 
End Sub 

它的作品,我想知道我該編碼的一部分是錯誤的?

感謝您的幫助!

回答

0

你的兩個代碼示例是不同的。在你的第二次嘗試,你這樣做:

Dim input = Console.ReadLine 
If Integer.TryParse(input, num) Then 

上面的代碼讀取到一個名爲input這將是一個String(因爲Console.ReadLine回報String)變量。然後,您嘗試將該字符串解析爲數字。

然而,在你的原代碼,你這樣做(爲了清楚省略了一些行):

Dim sevenNumbers As Integer() 
sevenNumbers = New Integer(6) {} 
... 
sevenNumbers(index) = Console.ReadLine() 

在這種情況下,你正在閱讀到您已明確聲明爲Integer的變量。如果用戶輸入​​,則此時轉換將失敗 - 您甚至不會將轉換爲TryParse,因爲您無法完成輸入。

而不是讀取一個整數,您需要讀入String變量,然後將該值解析爲Integer(如您在第二個代碼中所做的那樣)。

您可以通過注意到該錯誤實際發生時的調試上線都看準了這一點你自己:你應該注意到,在ReadLine程序崩潰,TryParse沒有

+0

是的,我已經改變sevenNumbers爲字符串,而不是使用整數和它的作品!謝謝! – user1702495

0

嗯。此行:

sevenNumbers(index) = Console.ReadLine() 

正在存儲任何文本已被讀入數組Integer s。如果正在編譯,那麼當您到達任何後續代碼時,您都無法控制轉換。它已經發生了。

也許sevenNumbers應該是String()

(你真的應該打開OPTION STRICTOPTION EXPLICIT - 它應該找到這樣對您的問題時,它編譯的代碼)

+0

謝謝你的提示,現在我能夠運行我的程序! – user1702495