Я пытаюсь создать игру tic tac toe с использованием матрицы, и она работает нормально, если у меня есть пользователь, который вводит каждую позицию как [0] [0] или [1] [2] и т. Д. Однако я хочу, чтобы пользователь мог вводить «a, b, c» и «1, 2, 3», но когда я пытаюсь изменить входные значения и ввести букву в консоль, я получаю:convert cin after input
Необработанное исключение в 0x01294C54 в ConsoleApplication3.exe: 0xC0000005: Место считывания нарушения доступа 0x345D4330.
Есть ли способ изменить входные значения пользователя без этого?
Вот первая часть кода, и проблема заключается в функции ввода.
#include <iostream>
#include <ctime>
using namespace std;
char matrix[3][3] = { '-', '-', '-', '-', '-', '-', '-', '-', '-' };
void Draw()
{
cout << " a b c" << endl;
int row=1;
for (int i = 0; i < 3; i++)
{
cout << row << " ";
for (int j = 0; j < 3; j++)
{
cout << matrix[i][j] << " ";
}
cout <<endl;
row++;
}
}
void Input()
{
int pos1, pos2;
cout << "Pick a place to put your X" << endl;
cin >> pos1 >> pos2;
if (pos1 == 'a')
pos1 = '0';
if (pos1 == 'b')
pos1 = '1';
if (pos1 == 'c')
pos1 = '2';
if (pos2 == '1')
pos2 = '0';
if (pos2 == '2')
pos2 = '1';
if (pos2 == '3')
pos2 = '2';
if (matrix[pos1][pos2] != 'O' && matrix[pos1][pos2] != 'X')
{
matrix[pos1][pos2] = 'X';
}
}
Где вы управляетесь с запятой разделителей, и как вы думаете, чтение 'a' в' int' будет работать? Неудачное извлечение потока оставит 'pos1' и' pos2' неинициализированными в коде pre-C++ 11. Это может происходить здесь. – LogicStuff
Кроме того, если вы меняете 'pos1' и' pos2' на 'char',' '0'' не' 0', а '48',' '1'' не' 1', а '49', и т. д. Это доступ за пределами допустимого диапазона. – LogicStuff