c++数组和if语句不起作用

c++ array and if statement not working

本文关键字:语句 不起作用 if 数组 c++      更新时间:2023-10-16

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

if (x[i]=4)将4分配给x[i]

您希望使用==进行比较。

请注意,赋值表达式返回赋值,在这种情况下,if (x[i]=4)将被求值为始终为true。

生活小贴士:启用编译器警告。


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

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

请记住,在C++(以及大多数语言)中,数组是基于零的
如果您有一个大小为N的数组,那么索引是从0N-1(总共N)。

所以你需要做:

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

必须使用==而不是=:

if (x[i]==4)

有几个问题很突出,第一个是您的主要问题,即您在这里使用赋值(=)而不是逻辑相等(==):

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++中的数组从索引0开始,而不是从1开始,您也没有进行任何边界检查,以确保n不会导致您超出数组边界,即undefined behavior。通常,由于数组从零开始,因此<用于结束条件。在这种特定的情况下,如果您的阵列具有10元素,您将使用i<10

if (x[i]=4)

此行不检查x[i]和4之间是否相等。它实际上在if语句中将4赋值给x[i],然后检查此赋值的结果是否实际等效于true

您需要使用正确的比较运算符:

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

这是一个常见的错误,编译器通常会忽略它。您在if语句中使用了赋值:

if(x[i]=4)

非比较:

if(x[i]==4).

这样的错误可以很容易地通过使用Yoda条件并在左侧写下具有r值的if语句(这里是你的"4")来消除,比如:

if(4==x[i])

如果拼写错误,将导致编译错误(您将被迫重新检查)。所以类似的东西

if(4=x[i])

将不会编译。

(或者启用将警告视为错误的选项)