2012-04-23 5 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のオーバーロードはありますか?このコードは間違っているようです。 –

+0

そのCEdit。過負荷はありません。 – nixgadgets

+0

このコードは、 'atof'が解析エラーを通知することができないという事実のための醜い回避策です。 'strtod'ができるようになり、コードがはるかに読みやすくなります。 – MSalters

答えて

1

実は、このコードはまた、負の数をチェックしています。最初のforループは2桁目以降をチェックします。

(テキストは[0] == ' - ')場合(テキストが[0] == '-1')ことになっている場合はライン

は、私はC++単一引用符で、このようので、それを推測することができます単一文字の場合のみ使用し、複数の文字を含む文字列の場合は使用しないでください。

C#では(text [0] == ' - ')と同じ行が機能します。

ありがとうございました。

+0

すごくありがたいです。私は理由があるかもしれない愚直さを持っていた。 – nixgadgets

+1

あなたの推測はほぼ正しいです:C++では、複数の文字を持つchar-literalの値は指定されていません。あなたのコンパイラは '' -1 ''を '' -''と同じにしましたが、 '' 1 '、 '' 0 'または'' - '+' 1 ''を選ぶこともできました。 – MSalters

関連する問題