2012-04-23 24 views
0

我有這個MFC應用程序與下面的一段代碼來檢查使用編輯控件在應用程序中輸入的數字的有效性。它被驗證爲一個字符串。MFC Visual C++代碼來檢查有效的數字條目

bool invalid = FALSE; 
int string_length = InputEdit.GetWindowText(text, 10); 
if (text[0] == '-1') 
    for(i=1; i<string_length; i++) 
     if((text[i] < '0' || text[i] > '9') && text[i] != '.'){ 
      MessageBeep(MB_ICONEXCLAMATION); 
      Reactive_Const_Status_Text.SetWindowText("Invalid AA Value"); 
      invalid = TRUE; 
     } 
else 
    for(i=0; i<string_length; i++) 
     if((text[i] < '0' || text[i] > '9') && text[i] != '.'){ 
      MessageBeep(MB_ICONEXCLAMATION); 
      Reactive_Const_Status_Text.SetWindowText("Invalid AA Value"); 
      invalid = TRUE; 
     } 

if(!invalid){ 
    double temp_value = atof(text); 
    reac.VelAA = temp_value; 
} 

所以這個編輯控件允許用戶輸入負數。然而,有人可以請說明這行代碼「if(text [0] =='-1')」在代碼中做了什麼嗎?它是否檢查負數,如果是的話爲什麼使用'-1'?其次,我想將此代碼轉換爲C#,那麼如何轉換此行?

在此先感謝

+0

什麼是InputEdit類?是否有GetWindowText超載?這段代碼對我來說似乎不對。它的CEdit是 – 2012-04-23 08:38:52

+0

。並沒有超載。 – nixgadgets 2012-04-23 08:41:29

+0

該代碼是一個醜陋的解決方法,因爲'atof'不能發出解析錯誤。 'strtod'可以,並且使代碼更具可讀性。 – MSalters 2012-04-23 14:14:37

回答

1

實際上,此代碼也檢查負數。第一個for循環從第二個數字開始檢查。

如果(文本[0] == '-1')被認爲是,如果(文本[0] == ' - ')的線

我在C++單引號猜到這種方式,因爲可以只能用於單個字符,不能用於具有多個字符的字符串。

在C#中,同一行if(text [0] ==' - ')將起作用。

謝謝。

+0

真棒謝謝你。我有一個預感可能是爲什麼。 – nixgadgets 2012-04-23 08:35:30

+1

你的猜測幾乎是正確的:在C++中,具有多個字符的char-literal的值是未指定的。您的編譯器將「-1」等於「 - 」,但同樣可以選擇「1」,「0」或「 - 」+「1」。 – MSalters 2012-04-23 08:43:41