#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>
using namespace std;
const int MAX = 9;
typedef char BOARD[MAX][MAX];
void dis_board(BOARD);
void new_board(BOARD, ifstream& in);
void add();
void remove(BOARD);
bool chk_row(BOARD arr, int row, int col);
bool chk_col(BOARD arr, int row, int col);
bool chk_sqr(BOARD arr, int row, int col);
int main()
{
BOARD board;
int row=0, col=0, num_ele = 0, num;
char ch1;
ifstream infile;
infile.open("mp6in.txt");
infile.get(ch1);
while (infile)
{
if (ch1 == 'N')
new_board(board, infile);
if (chk_row == false)
cout << "There is an error" << endl;
if (chk_col == false)
cout << "There is an error" << endl;
chk_sqr(board, 0, 0);
if (chk_sqr == false)
cout << "There is an error" << endl;
if (ch1 == 'D')
dis_board(board);
infile.get(ch1);
}
}
void dis_board(BOARD arr)
{
for (int i = 0; i < MAX; i++)
{
for (int j = 0; j < MAX; j++)
cout << setw(3) << arr[i][j];
cout << endl;
}
cout << endl;
}
void new_board(BOARD arr, ifstream& in)
{
in.ignore(100, '\n');
for (int i = 0; i < MAX; i++)
{
for (int j = 0; j < MAX; j++)
in.get(arr[i][j]);
in.ignore(100, '\n');
}
}
bool chk_row(BOARD arr, int row, int col)
{
for (int i = 0; i < MAX; i++)
{
if (i != col)
{
if (arr[row][i] == arr[row][col])
{
return false;
}
}
}
return true;
}
bool chk_col(BOARD arr, int row, int col)
{
for (int i = 0; i < MAX; i++)
{
if (i != row)
{
if (arr[i][col] == arr[row][col])
{
return false;
}
}
}
return true;
}
bool chk_sqr(BOARD arr, int row, int col)
{
int asquare = row / 3;
int bsquare = col / 3;
for (int i = asquare * 3; i < (asquare * 3 + 3); i++)
{
for (int j = bsquare * 3; j < (bsquare * 3 + 3); j++)
{
if (!(i == row && j == col))
{
if (arr[row][col] == arr[i][j])
{
return false;
}
}
}
}
return true;
}
以防万一我和别人说话。我尝试实现以下检查功能,当然它们无法正常工作。例如,我知道我的第一块板在右下方块中有重复的数字,但我的功能无法找到它。
答案 0 :(得分:0)
chk_row
是一个函数 - 你需要调用它。目前您只需查看:
if (chk_row == false)
这只是检查函数指针是否为false,这是永远不会发生的。你需要像这样调用函数:
if (chk_row(board, row, col) == false)
您需要了解row
和col
应该是什么。可能你需要一个循环来检查所有的行和列,但我认为这是作业,所以你应该自己尝试。