C ++ Изменить переменную char в функции - PullRequest
0 голосов
/ 23 марта 2012

Когда я запускаю это, числа 1-9 не меняются ни на X, ни на O, когда вы выбираете их. Они просто остаются числами. Это проблема с попыткой изменить значения char в void-функции? Не уверен, как это сделать без использования функции 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;
}

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

Это потому, что a - это символ, и вы сравниваете его с 1, который является числом.Например, когда игрок вводит fo 1 в качестве ввода, '1' сохраняется в a (а это 49 в ascii).И когда вы делаете сравнение, например, if(a == 1), оно в основном сравнивает значение ASCII '1' с 1 .... так что 49 == 1, что, конечно, ложноИтак, вы должны либо изменить тип a на int, либо сравнить char с char - a == '1'.

0 голосов
/ 23 марта 2012

вы сравниваете значения символов ascii с числами, что хорошо для компилятора, но я не думаю, что вы этого хотите.Поэтому либо измените char a to int

, либо измените сравнения на a=='1'

. Я бы предложил заменить все операторы if на array ,

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

в функциях, которые вы можете выполнять:

cin >> a;
numbers[a] = 'O';
0 голосов
/ 23 марта 2012

изменить char a; на int a;
это интерпретировать как символы

0 голосов
/ 23 марта 2012

Проблема в том, что когда вы сравниваете вводимые пользователем данные, вы сравниваете символьное значение (скажем, '1' со значением целого числа 1), которое (в большинстве случаев) не будет равно.

Измените ваши сравнения на if (a == '1') и так далее ...

Кроме того, вы можете захотеть сохранить ячейки доски (ваши переменные от 1 до 9) в некоторой коллекции (массив, std :: vector и т. Д.) Для более легкой обработки и возможного расширения в дальнейшем.

...