将用户输入存储到数组并显示它的简单代码。 如果数组的一个元素是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;
}
答案 0 :(得分:5)
if (x[i]=4)
将{4}分配给x[i]
。
您想使用==
进行比较。
请注意,作业的表达式会返回指定值,在这种情况下,if (x[i]=4)
会将始终评估为true。
终身提示:启用编译器警告。
您需要注意的另一件事是for
循环:
for(int i=1;i<=n;i++)
请记住,在C ++(以及大多数语言)中,数组从零开始。
如果您有一个大小为N
的数组,则索引从0
到N-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])
不会编译。
(或启用选项来处理错误等警告)