我一般都不熟悉C++ /编程,所以我一直在尝试看看我能做什么和不能做什么,并且遇到了似乎应该起作用的事情,但是没有。出于某种原因,当我将两个数组放置在任何函数之外以使其公开时,它们就像公开一样工作。
当我将它们都放置在主函数中时,代码可以正常工作,但是我也希望能够将它们用于其他函数。我编写它的方式是否有问题,还是需要将两个数组都放入我希望它们工作的每个函数中?
编辑:预期的行为是输入数字1-9并接收字母ai,然后在另一行上将字母更改为X。将数组放置在我希望它们使用的函数之外时,字母ai都不是如图所示,它会跳过该行并输出X。当放置在内部时,例如,如果我键入4,则“d”将输出,然后在下一行输出“X”。
#include <iostream>
using namespace std;
char pos[3][3] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'};
char pos2[] = {pos[3][3]};
char player = 'X';
int main()
{
int a;
for (int i = 0; true; i++)
{
cin >> a;
cout << pos2[a] << endl;
pos2[a] = player;
cout << pos2[a] << endl;
}
return 0;
}
最佳答案
您的pos2
数组只有一个元素。访问pos2[0]
以外的任何元素都是未定义行为。这意味着您的程序可能会崩溃,或者它似乎可以正常运行。
由于您尝试访问数组中的9个元素,因此应将其声明为
char pos2[9] = {pos[3][3]};
最好使用一些命名常量而不是硬编码9。这将创建一个9元素数组,第一个元素初始化为字符'i'
,其他8设置为0。由于您没有对输入进行任何错误检查,因此,如果用户未在
[0..8]
范围内输入数字,则很可能出现不良行为。 (pos[9]
超出范围。)要将其调整到[1..9
]范围,您需要在索引编制时减去1:cout << pos2[a - 1] << endl;
// (also other references to `pos2[a]`)
或将a
减1,然后再用作下标。
关于c++ - 为什么这些数组在本地时起作用,而在全局时却不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64235420/