0

将用户输入存储到数组并显示它的简单代码。如果数组的元素之一是 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].

您想使用==以进行比较。

请注意,赋值表达式返回分配的 value,在这种情况下if (x[i]=4)始终评估为 true。

生活提示:启用编译器警告。


您应该注意的另一件事是您的for循环:

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

请记住,数组在 C++(和大多数语言)中是从零开始的。
如果你有一个 size 数组N,那么索引是 from 0to N-1N总共)。

所以你需要这样做:

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

于 2013-08-04T14:15:18.403 回答
2

您必须使用==而不是=

if (x[i]==4)
于 2013-08-04T14:15:17.213 回答
2

有几个突出的问题,第一个是您的主要问题是您在这里使用 assignment( =) 而不是逻辑 equals( ==):

if (x[i]=4) 
        ^

应该:

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

启用警告可能会帮助您自己捕获此警告,例如在gccusing-W -Wall中会给您这样的警告:

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

你的for循环看起来也很奇怪:

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

C++ 中的数组从索引0not开始1,您也没有进行任何边界检查以确保n不会导致您超出数组边界,即undefined behavior. 通常由于数组从零开始<用于结束条件。在这种特定情况下,如果您的数组包含10您将使用的元素i<10

于 2013-08-04T14:20:14.033 回答
1
if (x[i]=4)

此行不检查x[i] 和 4 之间的相等性。它实际上x[i]在 if 语句中将 4 分配给,然后检查此分配的结果是否实际上等于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 回答