输入后转换cin
convert cin after input
我正在尝试使用矩阵创建一个井字游戏,如果我让用户将每个位置输入为 [0][0] 或 [1][2] 等,它运行良好。但是,我希望用户能够输入 "a, b, c" 和“1、2、3”,但是当我尝试更改输入值并在控制台中输入一个字母时,我得到:
Unhandled exception at 0x01294C54 in ConsoleApplication3.exe:
0xC0000005: Access violation reading location 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';
}
}
您正在使用越界索引访问 matrix
。访问 matrix
的有效索引是 matrix[0][0]
到 matrix[2][2]
。您正在使用字符 '0'
、'1'
和 '2'
来访问矩阵。如果您的系统使用 ASCII 编码,则它们的数值分别为 48、49 和 50。
此外,当您的变量类型为 int
并且您使用:
cin >> pos1;
程序将无法正确读取输入 a
。您需要使用:
char pos1;
cin >> pos1;
接受 a
作为有效输入。
这是您的函数的修改版本:
void Input()
{
char c1, c2;
int pos1, pos2;
cout << "Pick a place to put your X" << endl;
cin >> c1 >> c2;
if (c1 == 'a')
pos1 = 0;
else if (c1 == 'b')
pos1 = 1;
else if (c1 == 'c')
pos1 = 2;
else
{
// Error do something
}
if (c2 == '1')
pos2 = 0;
else if (c2 == '2')
pos2 = 1;
else if (c2 == '3')
pos2 = 2;
else
{
// Error do something
}
if (matrix[pos1][pos2] != 'O' && matrix[pos1][pos2] != 'X')
{
matrix[pos1][pos2] = 'X';
}
}
我正在尝试使用矩阵创建一个井字游戏,如果我让用户将每个位置输入为 [0][0] 或 [1][2] 等,它运行良好。但是,我希望用户能够输入 "a, b, c" 和“1、2、3”,但是当我尝试更改输入值并在控制台中输入一个字母时,我得到:
Unhandled exception at 0x01294C54 in ConsoleApplication3.exe: 0xC0000005: Access violation reading location 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';
}
}
您正在使用越界索引访问 matrix
。访问 matrix
的有效索引是 matrix[0][0]
到 matrix[2][2]
。您正在使用字符 '0'
、'1'
和 '2'
来访问矩阵。如果您的系统使用 ASCII 编码,则它们的数值分别为 48、49 和 50。
此外,当您的变量类型为 int
并且您使用:
cin >> pos1;
程序将无法正确读取输入 a
。您需要使用:
char pos1;
cin >> pos1;
接受 a
作为有效输入。
这是您的函数的修改版本:
void Input()
{
char c1, c2;
int pos1, pos2;
cout << "Pick a place to put your X" << endl;
cin >> c1 >> c2;
if (c1 == 'a')
pos1 = 0;
else if (c1 == 'b')
pos1 = 1;
else if (c1 == 'c')
pos1 = 2;
else
{
// Error do something
}
if (c2 == '1')
pos2 = 0;
else if (c2 == '2')
pos2 = 1;
else if (c2 == '3')
pos2 = 2;
else
{
// Error do something
}
if (matrix[pos1][pos2] != 'O' && matrix[pos1][pos2] != 'X')
{
matrix[pos1][pos2] = 'X';
}
}