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

时间:2013-08-04 14:13:24

标签: c++

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

5 个答案:

答案 0 :(得分:5)

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++)

答案 1 :(得分:2)

您必须使用==代替=

if (x[i]==4)

答案 2 :(得分:2)

有几个问题很突出,第一个问题是你在这里使用作业(=)而不是逻辑等于(==):

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不会引导你超出数组边界,这是{​​{ 3}}。通常,因为数组从零开始<用于结束条件。在这种特定情况下,如果数组包含10元素,则可以使用i<10

答案 3 :(得分:1)

if (x[i]=4)

此行不检查x[i]和4之间的相等性。它实际上在if语句中为x[i]分配了4,然后检查此分配的结果是否实际等效于{{1 }}

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

true

答案 4 :(得分:0)

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

if(x[i]=4)

不比较:

if(x[i]==4).

这样的错误可以通过使用Yoda条件轻松删除,并在左侧写下具有r值的if语句(这里是你的“4”),如:

if(4==x[i])

在拼写错误的情况下会导致编译错误(并且您将被迫重新检查它)。 像

这样的东西
if(4=x[i])

不会编译。

(或启用选项来处理错误等警告)