c++数组和if语句不起作用
c++ array and if statement not working
将用户输入存储到数组中并显示它的简单代码。如果数组的一个元素是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
的数组,那么索引是从0
到N-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])
将不会编译。
(或者启用将警告视为错误的选项)
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- C++ 中断语句不起作用
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- 切换语句不起作用 c++ 和 D:\c++ dev-c\Makefile.win 目标"abc.o"的配方失败
- C++ SQLite3 准备的删除语句不起作用
- std::cin 语句不起作用 C++
- 为什么我的 if 语句不起作用
- if 语句不起作用并被跳到 else 部分
- 如果宏中的语句不起作用
- 为什么嵌套如果语句不起作用
- SQLLITE UPDATE语句不起作用
- 选择在 Sqlite 数据库中有效,但插入和更新语句不起作用
- 我的 1 行 if-else 语句不起作用
- 如果统计语句不起作用
- 如果语句不起作用 VS2010
- 如果-否则语句不起作用
- 若该语句不起作用,则该语句为真
- 若语句不起作用,我希望它能起作用
- 为什么这个"if"语句不起作用?
- 如果带有字符串的语句不起作用