如何使用循环和数组比较和检查 C++

Posted

技术标签:

【中文标题】如何使用循环和数组比较和检查 C++【英文标题】:How to compare and check in c++ using loops and array 【发布时间】:2011-07-30 00:19:16 【问题描述】:

这是我新编辑的代码,我在最终的 if 循环中遇到了问题,用于存储在数组中的 X 和 O。我正在尝试检查数组中是否已经存在 X 或 O。如果有一个它会要求用户输入另一个输入然后重新开始但是当我运行程序时会发生这种情况:

1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number: 1
player X your number is 1
X | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number: 1
Please enter another Number2
player O your number is 1
O | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number:





char c;


        cout << "Please Enter Box Number: ";
        cin >> c;


        if (c > '9' || c < '0')
        
            // error message
            cout << "please enter a number 1-9" << " ";
            cin >> c;
            cin.ignore(numeric_limits<int>::max(), '\n');

        

        if (c < '9' || c > '0') 
        
            int number = c - '0';

            if (board[number - 1] == 'X' || board[number - 1] == 'O') 
            
                cout << "Please enter another Number";
                cin >> c;
                cin.ignore(numeric_limits<int>::max(), '\n');

            
            else if (board[number -1] != 'X' || board[number - 1] != 'O' ) 
                if (player == 'X')
                 
                    player = 'O';
                
                else 
                
                    player = 'X';
                




                cout << "player " << player <<  " your number is " << number << endl;
                // Your implementation here...



                board[number - 1] = player;

            


        







    

【问题讨论】:

想想如何利用字符 '0' 到 '9' 的 ASCII 值都是连续的这一事实。也就是说,像 '8' - '4' 这样的东西会变成实际的整数 4。 【参考方案1】:

首先是第二个问题(简单的):

return 退出当前函数。因此,在返回之后,您的函数中不会再执行任何指令。您应该删除 return 并将其余代码(如果输入无效,则不应执行)放在 if 的 else 块中。

第一个问题:

为什么要检查数组中每个位置的索引(如板[7] = '8')。你已经知道位置,你需要在每个单元格中标记的是使用它的玩家;例如设置'X'(玩家1),'O'(玩家2),''(空)的值。

如果您将输入的 'c' 转换为整数并将其用作索引,而不是九个“if”,它会更容易。使用 ASCII 字符(我不知道这是否仍然适用于 WCHAR、UTF-8 等),你可以让它变得又快又脏:

int k = c - '0';

board[k] = player;


编辑: 考虑到检查该正方形是否尚未使用:

int k = c - '0';
if (board[k] == ' ') 
  board[k] = player;
 else 
  cout << "This square is already used";

【讨论】:

我什至没有注意到return 声明。好收获! 恕我直言,如果您代表玩家 X、玩家 O 和空方格,您应该只使用字符 'X'、'O' 或 ' ' 来表示每个方格的状态(不分配 ' 1'到'9'到数组中的项目,但将它们全部初始化为'')。在分配之前查看检查方块状态的代码的编辑。【参考方案2】:

要循环返回直到输入有效值,您可以执行以下操作:

int number = 10;

while( ( number > 9 ) || ( number < 0 ) )

    std::cout << "Please Enter Box Number: ";
    std::cin >> number;


std::cout << "Your number is " << number << std::endl;

我不太确定您对另一部分的要求是什么。如果/当我这样做时,我会编辑我的回复。

【讨论】:

【参考方案3】:

http://www.asciitable.com/

如果您查看 ascii 图表,您会注意到所有字符都有十进制值。因此,当您的老师从用户输入的内容中减去“0”时,说“1”他确实在做:

int number = (int)'1' - (int)'0'; // x will equal 1

然后可以使用 [ ] 符号直接访问您的数组:

board[number] = player

【讨论】:

以上是关于如何使用循环和数组比较和检查 C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ For 循环和数组混淆

关于循环和数组的练习 - 使用循环 1 次以及如何获取数组的最大值

如何使用 for 循环将一维数组的值放入 C++ 中的二维数组

C ++如何检查数组中的元素是不是相等?

如何使用静态数组的结束指针作为循环条件比较 x86 中的地址?

如何使用CUDA并行化嵌套for循环以在2D数组上执行计算