首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tac Tac Toe cin输入问题

Tac Tac Toe cin输入问题
EN

Stack Overflow用户
提问于 2014-02-11 10:56:58
回答 1查看 217关注 0票数 0

关于tic tac toe的问题我试图允许用户输入“0,0”(行/列)格式,否则将是无效的。错误是,如果我输入任何正确的网格号,它都会给出一个无效的错误。

“即-- '1,2‘

无效错误

无效错误

无效错误“

因此,如果用户输入的数字正确,则不会在任何网格中插入用户输入的内容。

所以这里是我的代码,任何建议/帮助都是值得感谢的。还请注意,我只是尝试验证和输入X和O,而不是真正检查用户是否平局/获胜

代码语言:javascript
复制
#include <iostream>
#include "Tictactoe.h"

using namespace std;

int main(){
char board[3][3]={{'.','.','.'},{'.','.','.'},{'.','.','.'}};
bool gameover(true);
int iPlayerTurn(1);

do {
    // Print board

cout << " -   0   1   2" << endl;
cout << "   +---+---+---+" << endl;

cout << " 0" << " | " << board[0][0] << " | " << board[0][1] << " | " << board[0][2] << " | " << endl;
cout << "   +---+---+---+" << endl;

cout << " 1" << " | " << board[1][0] << " | " << board[1][1] << " | " << board[1][2] << " | " << endl;
cout << "   +---+---+---+" << endl;

cout << " 2" << " | " << board[2][0] << " | " << board[2][1] << " | " << board[2][2] << " | " << endl;
cout << "   +---+---+---+" << endl;



char cPlayerMark;
    if (iPlayerTurn == 1) {
        cPlayerMark = 'X';
    } else {
        cPlayerMark = 'O';
    }
// check if move is valid

    std::cout << "Player" << iPlayerTurn << "'s move:" << std::endl;
    bool bValidMove;
    // Loop until we get a valid move
    do {
        char cNextMove;
        cin >> cNextMove;
        bValidMove = true;

        // Check for a valid move
        if (cNextMove == '0,0' && board[0][0] == '.') {
            board[0][0] = cPlayerMark;
        } else if (cNextMove == '0,1' && board[0][1] == '.') {
            board[0][1] = cPlayerMark;
        } else if (cNextMove == '0,2' && board[0][2] == '.') {
            board[0][2] = cPlayerMark;
        } else if (cNextMove == '1,0' && board[1][0] == '.') {
            board[1][0] = cPlayerMark;
        } else if (cNextMove == '1,1' && board[1][1] == '.') {
            board[1][1] = cPlayerMark;
        } else if (cNextMove == '1,2' && board[1][2] == '.') {
            board[1][2] = cPlayerMark;
        } else if (cNextMove == '2,0' && board[2][0] == '.') {
            board[2][0] = cPlayerMark;
        } else if (cNextMove == '2,1' && board[2][1] == '.') {
            board[2][1] = cPlayerMark;
        } else if (cNextMove == '2,2' && board[2][2] == '.') {
            board[2][2] = cPlayerMark;
        } else {
            cout << "Invalid Move. Try again." <<endl;
            bValidMove = false;
        }
    } while (!bValidMove);

}while (!gameover);
}
EN

回答 1

Stack Overflow用户

发布于 2014-02-11 11:05:45

问题是您已经将cNextMove定义为字符而不是字符串。因此,无论用户输入多少个字符,它都只能包含一个字符。而这种比较永远是错误的。

如果你用gcc4.8编译你的代码,你实际上会得到如下的警告:

代码语言:javascript
复制
test.cpp:45:26: warning: multi-character character constant [-Wmultichar]
         if (cNextMove == '0,0' && board[0][0] == '.') {
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21692140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档