0

次の C++ コード:

if (a != '0.5' || a != '0.6')
{
    cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}

私も試してみました

if ((a != '0.5') || (a != '0.6'))
{
   cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}

そして試した

if ( !(a== '0.5') || !(a==0.6)
{
     cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}

ユーザーから数値を受け取り、その数値が 0.5 か 0.6 かを確認します。それがそうである場合、それは false ステートメントとして実行されるべきですが、それ以外の数値である場合は true として実行されるべきです。ただし、0.5 または 0.6 を入力すると false として実行されるはずですが、true として実行され続けます。これは、次のように正常に機能するelse ifステートメントを使用すると異なります。

if (a != 0.5)
{
    //what to do if true.
}
else if (a != 0.6)
{
    //What to do if this is true and the first id wrong.
}
else
{
    //What to do if none are true.
}

if ステートメントで != を実行できないのはなぜですか?

4

6 に答える 6

3

論理が間違っています。現在、数値が 0.5 でないか 0.6 でないかを同時にチェックしています。すべての数値がそのテストに合格します。||論理和 ( ) を論理積( )に置き換える必要があります&&

また、数値から一重引用符を削除する必要があります。そうしないと、実装定義の値を持つ複数文字リテラルが作成されます。

if (a != 0.5 && a != 0.6)
{
    cout << "The answer is neither 0.5 nor 0.6 " << '\n';
}
于 2012-07-26T08:27:37.240 に答える
2

a is supposed to be a float or a string ? In either way, this syntax is wrong '0.5', if it's a string use double quotes. Don't compare with float/double for (in)equality, because of the internal representation this won't work as you expect, see how-to-correctly-and-standardly-compare-floats.

于 2012-07-26T08:18:07.150 に答える
1

の型は何ですか?

std::文字列

仮定する:

std::string a;
std::cin >> a;

次に、次のコードが機能します。

if (a == "0.5" || a == "0.6")
{
    // Do something when it's true
}
else
{
    // Do something when it's false
}

"0.5" と "0.6" はconst char*ですが、 std::stringに変換されるため、うまく機能します。

const char *

char a[BUFSIZE];
std::cin >> a;
if (strcmp(a, "0.5") == 0 || strcmp(a, "0.6") == 0)
{
  // Do something when it's true
}
else
{
  // Do something when it's false
}

strcmpを使用して、C スタイルの文字列を比較できます

フロート/ダブル

float を比較している場合、精度の問題が発生する場合があります。問題を解決するために、いくつかの関数または Float クラスを作成できます。このような:

const double EPS = 1e-8;
inline bool FloatEqual(const double lhs, const double rhs)
{ return std::fabs(rhs-lhs) <= EPS; }
int main()
{
  double a;
  std::cin >> a;
  if (FloatEqual(a, 0.5) || FloatEqual(a, 0.6))
  {
    // Do something when it's true
  }
  else
  {
    // Do something when it's false
  }
}

ところで

次のステートメントが等しいことを見つけるのは興味深いことです

if (a == "0.5" || a == "0.6")
if (!(a != "0.5" && a != "0.6"))
于 2012-07-26T09:40:11.773 に答える
0

がcharの場合a、次のようなことを行うと奇妙なことが起こります。

char a = '0.5';
cout << "A: " a << endl;

これは次のように出力されます(私のコンパイラでは、他のものについては確信が持てません):

A: 5

と:

char a = '0.5';
if (a == '5')
    cout << "yey" << endl;
else
    cout << "oops" << endl;

これは出力します:

yey

しかし、私はこの振る舞いが定義されていないと思います(私は確かにわかりません)。とにかく、それはあなたが思うように思われることをしません。

第二に、私はあなたの論理が間違っていると思います:

あなたが言っています:

そうでない場合、0.5またはそうでない場合0.6

私があなたが意味すると思うところ

そうでない場合、0.5そしてそうでない場合0.6

if (a != '0.5' && a != '0.6')
于 2012-07-26T08:28:46.157 に答える
0

0.5 と 0.6 から一重引用符を削除し、||(OR) ではなく &&(AND) を使用する必要があります。 if (a != 0.5 && a != 0.6)

于 2012-07-26T08:15:31.770 に答える
0

それは違いない

if (a != 0.5 && a != 0.6)
于 2012-07-26T08:17:20.100 に答える