我正在制作一个数独游戏程序而且我有一个读取
的test.txt文件53__7____
6__195___
_98____6_
8___6___3
4__8_3__1
7___2___6
_6____28_
___419__5
____8__79
其中“_”实际上是空格。我给你_的原因是你可以看到每行只有9个字符。
我在想我必须做一些像GRID [row] [column]这样的事情,但我坦率地不知道我应该把我的数组放在哪个类型而且我只是迷失了。
我只是想这样做,当我想输出说GRID [0] [0]它返回5,而如果我要求GRID [0] [3]它返回一个''。
它正在得到它所以数组存储数字和空格是我完全失去的地方
到目前为止我目前所尝试的内容:
int main()
{
ifstream myfile(test.txt);
string line;
char sudoku_grid[9][9];
if (myfile.is_open())
{
while(myfile.good())
{
getline(myfile, line);
cout << sudoku_grid[line] << endl;
}
myfile.close();
}
else cout << "error";
return 0;
}
它返回错误行12:'sudoku_grid [line]'中的'operator []'不匹配
这是我通过你们的指导尝试:
int main()
{
ifstream myfile(test.txt);
string line;
char sudoku_grid[9][9];
if (myfile.good())
{
for(int i = 0; i < 9; i++)
{
getline(myfile, line);
for(int j = 0; j < 9; j++)
{
if (line[j] == ' ')
sudoku_grid[j][i] = -1;
else sudoku_grid[j][i] = line[i];
}
cout << sudoku_grid[i] << endl;
}
myfile.close();
}
else cout << "error";
return 0;
}
结果是奇怪的字母和新数字的非常尴尬的答案。
答案 0 :(得分:2)
我只会给你算法/逻辑,而不是为你编写代码。尝试一下,卡住后再回来。
numbers[9][9]
i
numbers[i]=c
,否则为numbers[i]=-1
您的数组可以由int
和b2组成,如果遇到whitespace
,您可以插入-1
来表示没有数字。当然,操作numbers
数组的代码需要考虑到这一点。
答案 1 :(得分:0)
由于您需要存储字符和整数类型值,因此请使用 char 。每个整数都在0-9范围内,因此可以存储为字符。
char Grid[9][9];
现在您可以从字符串中读取每个字符并将其存储在数组中。它不仅可以保持您的空间完整,还可以保持每个角色。始终记得使用ASCII代码访问网格元素。对于 0-9 ,ASCII代码 48-57 ,空格的ASCII代码 32 。
希望它有所帮助...
编辑代码:这是最简单的示例...在d:中放置您的测试文件,或在代码中编辑文件的路径
int main (void)
{
FILE *fp = fopen("d:\\test.txt","r");
char sudoku_grid[9][9], ch;
// I am assuming that file is valid and data in that is also valid
if(fp)
{
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
//too read each character
ch = fgetc(fp);
sudoku_grid[i][j] = ch;
}
// to read '\n' from the line
ch = fgetc(fp);
}
//for checking if data went correctly
for(int i = 0; i< 9;i++)
{
for(int j= 0; j<9;j++)
cout<<sudoku_grid[i][j];
cout<<endl;
}
}
return 0;
}
答案 2 :(得分:0)
在第一个代码中,您会收到错误消息,因为sudoku_grid可以 只能用数字而不是字符串索引。
在第二段代码中
行sudoku_grid[j][i] = line[i];
应该是
sudoku_grid[j][i] = line[j];
这会回答你的问题吗?