繁体   English   中英

C ++更改函数中的char变量

[英]C++ Change char variable in function

当我运行此命令时,选择它们时,数字1-9不会更改为X或O。 他们只是停留在数字上。 尝试在void函数中更改char值是否有问题? 不知道如何在不使用void函数的情况下完成此操作。

#include <iostream>
#include <string>

using namespace std;

char vert = 0xB3;
char hori = 0xC4;
char cros = 0xC5;
char one = '1';
char two = '2';
char thr = '3';
char fou = '4';
char fiv = '5';
char six = '6';
char sev = '7';
char eig = '8';
char nin = '9';
char a;

void board()
{
    system("cls");
    cout << one << vert << two << vert << thr << endl
         << hori << cros << hori << cros << hori << endl
         << fou << vert << fiv << vert << six << endl
         << hori << cros << hori << cros << hori << endl
         << sev << vert << eig << vert << nin << endl;
}



void player1pick()
{
    cout << "First Player's turn. Please pick a box: ";
    cin >> a;
    if(a == 1)
    {
        one = 'X';
    }
    if(a == 2)
    {
        two = 'X';
    }
    if(a == 3)
    {
        thr = 'X';
    }
    if(a == 4)
    {
        fou = 'X';
    }
    if(a == 5)
    {
        fiv = 'X';
    }
    if(a == 6)
    {
        six = 'X';
    }
    if(a == 7)
    {
        sev = 'X';
    }
    if(a == 8)
    {
        eig = 'X';
    }
    if(a == 9)
    {
        nin = 'X';
    }
    board();
}

void player2pick()
{
    cout << "Second Player's Turn. Please pick a box: ";
    cin >> a;
    if(a == 1)
    {
        one = 'O';
    }
    if(a == 2)
    {
        two = 'O';
    }
    if(a == 3)
    {
        thr = 'O';
    }
    if(a == 4)
    {
        fou = 'O';
    }
    if(a == 5)
    {
        fiv = 'O';
    }
    if(a == 6)
    {
        six = 'O';
    }
    if(a == 7)
    {
        sev = 'O';
    }
    if(a == 8)
    {
        eig = 'O';
    }
    if(a == 9)
    {
        nin = 'O';
    }
    board();
}

int main()
{
    board();
    player1pick();
    player2pick();
    player1pick();
    player2pick();
    player1pick();
    player2pick();
    player1pick();
    player2pick();
    player1pick();

    return 0;
}

这是因为a是一个字符,您将其与1(一个数字)进行比较。 例如,当玩家输入fo 1作为输入时,“ 1”存储在a中(ASCII中为49)。 当您进行比较时,例如if(a == 1)它基本上会将'1'的ascii值与1进行比较。...因此49 == 1这当然是错误的。 ou,您必须将a的类型更改为int,或者将char与char- a == '1'

问题在于,当您比较用户输入时,您正在比较一个字符值(例如'1'与整数值1 ),该字符值(在大多数情况下)将不相等。

将比较更改为if (a == '1') ,依此类推...

另外,您可能想修改一下将板单元(变量1到nin)存储在某种集合中(数组,std :: vector等),以便于以后处理和扩展。

更改char a; int a;
它解释为字符

您正在将字符的ascii值与数字进行比较,这对于编译器来说可以,但是我认为这不是您想要的。 所以要么将char a to int更改char a to int

或将比较结果更改为a=='1'

我建议您将所有的if语句替换为一个数组

int a;
char numbers[9] = {'1','2','3','4','5','6','7','8','9'};

在您可以执行的功能中:

cin >> a;
numbers[a] = 'O';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM