gpt4 book ai didi

c++ - 从文件读入后数组的第一个元素奇怪

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:34 25 4
gpt4 key购买 nike

我正在从文本文件中读取数独板。棋盘由 9 行 9 位数字表示,如下所示:

594632817
123478569
678159234
215346798
346897125
789215346
437561982
851924673
962783451

编辑

以下是我将 while 条件更改为 (input >> char) 时的结果:

读入字符输出:

96212486
71931369
48728254
35185947
67350

printArray 的输出:

962124867
193136948
728254351
859476735

�$%w��
����QȿȔ
L�`g�Pw
���w�

这是 while (!input.eof()) 的输出:

�94632817
123478569
678159234
215346798
346897125
789215346
437561982
851924673
962783451

结束编辑

问题是,当我将每个数字放入多维数组时,[0][0] 处的元素显示为带阴影的问号(使用 g++ 编译)。只有当我打印出数组的内容时,问题才会浮出水面,读入的数据似乎没问题。对于它的工作原理,如果我从 main 函数中 cout << board[0][0] 也会发生这种情况。

如有任何帮助,我们将不胜感激!

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int createArray(string filename);
bool checkRows(char board[][9]);
bool checkColumns(char board[][9]);
bool checkBoxes(char board[][9]);
void printArray(char board[][9]);

int main ()
{
char board [9][9];
int i = 0;
int j = 0;
int count = 0;

ifstream input("board.txt");

char ch;

while (input >> ch)
{
// ch = input.get();
if (ch != '\n')
{

cout << ch;
board[i][j] = ch;
j++;

if (j % 9 == 0)
{
i++;
}

}
if (j > 8)
j = 0;
if (i > 8)
i = 0;

count++;

if (count % 10 == 0)
cout << endl;
}

input.close();

printArray(board);
cout << checkRows(board) << endl;
cout << checkColumns(board) << endl;

return 0;

}


void printArray(char board[][9])
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << board[i][j];
}
cout << endl;
}

cout << board[0][0] << endl;
cout << board[0][1] << endl;

}

最佳答案

通过这样做,读取 ch 两次。

删除 ch = input.get();,您将正确读取每个数字。

while (input >> ch)
{
ch = input.get();
...
}

同样,考虑改变下面的条件以确保正确的 endl 放置

if (count % 10 == 0)
cout << endl;

if (count % 9 == 0)
cout << endl;

关于c++ - 从文件读入后数组的第一个元素奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com