0

Cでプログラムのエラーチェックを行っており、現在、入力データポイントがfloat/ int(本質的に文字ではない)であることを確認するためにテストしています

この目的のために、isalpha関数を使用しています。100 未満のすべての数値で機能しますが、100 の値を入力すると、0 ではなく 1024 が返されます。これが発生する特定の理由、またはこれをエラー チェックするより良い方法をご存知ですか?

if ((isalpha(T1) != 0) || (isalpha(T2) != 0) || (isalpha(T3) != 0)
|| (isalpha(X1) != 0) || (isalpha(X2) != 0) || (isalpha(X3) != 0))
{
    error checking statements
}
else
{
    Calculations
}
4

1 に答える 1

1

float を に渡すのはなぜisalphaですか? 文字をフロートに格納してチェックするポイントは何ですか?

の宣言isalphaint isalpha ( int c );であるため、float を渡すと、float が に切り捨てられint、間違った結果が生成されます。99.5 などを入力してみてください。

さらに重要なことはisalpha、char 値または EOF でのみ機能し、他の値は未定義の動作を引き起こすことです。

ch の値が unsigned char として表現できず、EOF と等しくない場合、動作は未定義です。

http://en.cppreference.com/w/cpp/string/byte/isalpha

これは基本的に XY 問題です。isalpha入力値を検証する方法ではありません。入力を文字列として取得し、条件に適合するかどうかを確認する必要があります

于 2014-03-07T07:07:42.523 に答える