if/else 数组语句失败

if/else statement with arrays is failing

所以代码真的很简单,它只是一个 main(),但是 if/else 语句 while 中有一些错误cycle 我不知道它是什么,我以为它应该这样工作,但显然不是。

代码正在创建一个 11 元素数组,但数组的第 0 个元素是由用户键入的。例如,我输入 5,数组中有 5 到 15 的数字。然后程序会显示数组中的数字。然后你可以输入任何数字,如果你的数字等于数组中的任何数字,那么程序应该说:“YEES!!!”。

问题是,程序总是说,只有当输入的数字不等于数组中的任何数字时才应该做什么...

所以请有人解释一下为什么 if/else 声明失败了?

我也在 Code::Blocks 中写了这个,如果它改变了什么...

代码:

#include <iostream>
using namespace std;

int main(){
    int numbers[11];
    int input;

    cout << "Type in a number: ";
    cin >> input;

    for (int i=0; i<11; i++){
        numbers[i] = input +i;
    }

    for (int i=0; i<11; i++){
        cout << numbers[i] <<endl;
    }

    while (true){
        cout<<endl;
        cout << "Type in a number:" <<endl;
        cin.sync();
        cin >> input;
        if (input <= numbers[11] && input >= numbers[0])
            cout << "YEES!!!" << endl;
        else{
            cout << "Number is out of range!" <<endl;
            cout << "Please try again!" <<endl;
        }
    }

    return 0;
}

数组中的最后一个元素应该是 10,而不是 11,因为您从零开始。尝试做

if (input <= numbers[10] && input >= numbers[0])

索引从零开始,所以如果你创建一个大小为 N 的数组,最后一个索引总是 N-1。在你的例子中,最后一个元素的索引是 10.

if (input <= numbers[10] && input >= numbers[0]) // accurate

虽然其他答案清楚地处理了索引问题(数组索引从 0 开始,11 元素数组的最后一个索引是 10),但发生了一点 XY 问题这里。 如果你需要判断一个输入的数字是否在1到11的范围内,完全没有必要使用数组。您只需要检查它是否小于或等于 11 且大于或等于 1。

if (input <= 11 && input >= 1) {
    // ...
}

您的代码本质上是在尝试执行此操作,但将范围的底部存储在 numbers[0] 中,将范围的顶部存储在 numbers[10] 中,而数组的其余部分未使用。如果您愿意,可以使用两个变量来存储这些限制。