1

我一般是 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;
}
4

1 回答 1

1

您的pos2数组只有一个元素。pos2[0]访问除未定义行为之外的任何元素。这意味着您的程序可能会崩溃,或者它可能看起来运行良好。

由于您尝试访问数组中的 9 个元素,因此应将其声明为

char pos2[9] = {pos[3][3]};

最好使用一些命名常量而不是硬编码的 9。这将创建一个 9 元素数组,第一个元素初始化为字符'i',其他 8 设置为 0。

由于您没有对输入进行任何错误检查,因此如果用户没有在 range 中输入数字,则很有可能出现不良行为[0..8]。(pos[9]超出范围。)要将其调整为范围 [ 1..9],您需要在索引期间减去 1:

cout << pos2[a - 1] << endl;
// (also other references to `pos2[a]`)

a或在用作下标之前减1。

于 2020-10-07T00:48:12.367 回答