2013-06-28 108 views
1

我有一個是由用戶使用來輸入傳遞到給定的輸入的大小的陣列和輸入元件如下一個簡單的程序: Full code循環沒有完成

所有代碼工作正常,除了這個片段:

for(int i=0; i<size; i++) { 
      flagger = false; 
       while(flagger == false) { 
       System.Console.WriteLine("Please enter number " + i + " : "); 
       nextInput = System.Console.ReadLine(); 
       flagger = errorCheck(nextInput); 
      } 

      int varPass = System.Convert.ToInt32(nextInput); 
      System.Console.WriteLine(flagger); 
      arr[i] = varPass; 
     } 

無論我輸入什麼大小,循環會盡早退出並用一些空元素對數組進行排序,任何人都可以看到問題嗎?

+2

它可以在'i'達到'size'之前完成的唯一方法是拋出異常。 –

+2

問題出在內部'while'循環。看來'errorCheck'方法永遠不會返回'true'。順便說一句,'flagger == false'和'!flagger'是一樣的。 – Leri

+0

嗨,這是爲什麼?我認爲我的邏輯是正確的 – MattTheHack

回答

4

在錯誤檢查中,您正在設置大小的值,因爲您將它傳遞給out參數。

因此,下次用戶輸入小於i的數字時,循環會提前退出。 創建一個虛擬int或處理您的錯誤檢查不同。 示例:

static bool errorCheck(string input) { 
    int temp=0; 
    if (int.TryParse(input, out temp)) 
     return true; 
    return false; 
} 

發生此「錯誤」是因爲大小是靜態的。

您可以通過返回TryParse的結果來進一步簡化代碼。

static bool checkErr(string input) { 
    int temp=0; 
    return int.TryParse(input, out temp); 
} 
+0

嗨,感謝這個啓示。我如何修改代碼,以便檢查輸入是否爲int,然後繼續? – MattTheHack

+0

@Steve我看了這個問題,並按下OP提供的鏈接... – Mataniko

+0

@MattMcGrath我用固定功能更新了答案 – Mataniko

1

你還沒有包含errorCheck方法,這對我來說似乎很重要。 如果錯誤檢查返回true,則循環將提前結束。編輯:哎呀,你確實包括一個鏈接到完整的代碼。

正如我的前任所說,errorCheck(...)修改「大小」。也許這就是爲什麼我仍然用成員變量加下劃線。錯過很容易。