0

ユーザー入力を配列に格納して表示する単純なコード。配列の要素の 1 つが 4 の場合、画面に「4」と表示されます。しかし問題は、配列に数字の 4 がなくても、常に 4 を出力することです。

#include <iostream>
using namespace std;


int main (){

    int x[10];
    int n;
    cin>>n;

    for(int i=1;i<=n;i++){
    cin>>x[i] ;       


    }
    cout<<endl;
       for(int i=1;i<=n;i++){
    if (x[i]=4) 
    cout<<"four"<<endl;
    else continue;     


    }


    system("pause");
    return 0;
}
4

5 に答える 5

5

if (x[i]=4)に 4 を割り当てx[i]ます。

==比較するために使いたい。

割り当ての式は、割り当てられた値を返すことに注意してください。この場合、常にtrueif (x[i]=4)と評価されます。

一生のヒント: コンパイラの警告を有効にします。


もう 1 つ気を付けなければならないことは、forループです。

for(int i=1;i<=n;i++)

C++ (およびほとんどの言語) では、配列はゼロから始まることに注意してください。
size の配列がある場合N、インデックスは から0(N-1合計N) までです。

したがって、次のことを行う必要があります。

for(int i=0;i<n;i++)

于 2013-08-04T14:15:18.403 に答える
2

際立った問題がいくつかあります。最初の主な質問は、ここ=で論理 equals( ) の代わりに assign( )を使用していることです。==

if (x[i]=4) 
        ^

次のようにする必要があります。

if (x[i]==4) 
        ^^

警告を有効にすると、おそらくこれを自分でキャッチするのに役立ちます。たとえば、gccを使用-W -Wallすると、次のような警告が表示されます。

warning: suggest parentheses around assignment used as truth value [-Wparentheses]

あなたのforループも奇妙に見えます:

for(int i=1;i<=n;i++)
          ^  ^^

C++ の配列はインデックス0not1で始まります。また、境界チェックを行ってnいないため、配列境界の外に出ないことを確認します。これはundefined behaviorです。通常、配列はゼロから始まる<ため、終了条件に使用されます。この特定のケースで、配列に10要素がある場合は、 を使用しますi<10

于 2013-08-04T14:20:14.033 に答える
2

==の代わりに使用する必要があります=:

if (x[i]==4)
于 2013-08-04T14:15:17.213 に答える
1
if (x[i]=4)

この行は と 4 が等しいかどうかをチェックしません。実際には if ステートメントで にx[i] 4 を代入し、この代入の結果が と実際に等しいかどうかをチェックします。x[i]true

正しい比較演算子を使用する必要があります:

if (x[i] == 4)
         ^^
于 2013-08-04T14:15:22.627 に答える
0

これは一般的な間違いであり、通常はコンパイラによって無視されます。if ステートメントで代入を使用しました:

if(x[i]=4)

比較しない:

if(x[i]==4).

このような間違いは、Yoda 条件を使用し、次のように左側に r 値 (ここでは「4」) を持つ if ステートメントを記述することで簡単に削除できます。

if(4==x[i])

スペルミスの場合、コンパイルエラーが発生します(そして、再チェックを余儀なくされます). だから何か

if(4=x[i])

コンパイルされません。

(または、警告をエラーとして扱うオプションを有効にします)

于 2013-08-04T18:57:55.190 に答える