我想让数组中的一些元素在运行时评估为真。稍后,当用户占用一个单元格时,其值变为 false。例如,我声明了一个 bool 类型的数组,其中包含 3 个在启动时为真的元素。然后提示用户输入数字。如果用户输入 0 然后再次输入 0,他们将被警告。
编码:
#include <iostream>
using namespace std;
int main()
{
bool myArray[3] = {true};
int action;
bool TurnOff = false;
do
{
cout << "Action: ";
cin >> action;
if (myArray[action] == true)
{
cout << "This cell is free\n";
myArray[action] = false;
}
else
{
cout << "this cell is busy\n";
}
}
while (TurnOff != true);
cout << "Done";
}
从理论上讲,我希望如果用户第一次输入 0,则会显示一条消息,表明该单元格是空闲的,如果它已经被占用,则会显示一条单独的消息。问题的本质是,如果你输入 0,然后再输入 0,那么一切都按预期工作。如果输入 1,程序会立即说这样的单元格已被占用。程序输出示例:
Action: 0
This cell is free
Action: 1
this cell is busy
Action: 2
this cell is busy
Action: 4
This cell is free
Action: 5
This cell is free
Action: 6
This cell is free
Action: 7
this cell is busy
Action: 8
This cell is free
Action: 9
This cell is free
Action: 0
this cell is busy
Action: 11
this cell is busy
Action: 12
This cell is free
Action:
为什么程序允许大于 2 的数字?毕竟,我指定数组的大小等于 3。
我意识到我根本不明白布尔数组是如何工作的。如何使大量数组元素在启动时设置为 True (可用)并仅在已使用时才更改为 False ?
“我意识到我根本不明白布尔数组是如何工作的。” - 就像任何其他类型一样。
这个
定义一个由三个元素组成的数组,其中第一个(索引为 0)元素是
true
,其余元素是false
。接下来的一切都是未触及的记忆。您无权访问,但检查越界数组的责任完全在于您。所以如果你想以你想要的方式初始化数组:) - 那么
好吧,或者使用,比如说,
并且 - 一定要检查数组是否超出范围 - 很明显,如果输入
action
大于 2(或小于 0),您将获得 UB。如果您尝试显示您的数组,您将看到
true, false, false
. 如果初始化列表中的值少于数组中的值,则数组的最后一个单元格将被初始化为零。要使用某个值填充整个数组,请使用
std::fill_n
;至于超越阵法,全凭良心。数组越界会导致未定义的行为。未定义的行为可以是任何东西:正常操作、段错误、硬盘格式化。这次你似乎走运了:)