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]
中,而数组的其余部分未使用。如果您愿意,可以使用两个变量来存储这些限制。
所以代码真的很简单,它只是一个 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]
中,而数组的其余部分未使用。如果您愿意,可以使用两个变量来存储这些限制。