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

时间:2014-02-22 00:24:32

标签: c++ arrays

我正在从文本文件中读取sodoku板。该板由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 ++编译)。当我打印出数组的内容时,问题才会出现,读入的数据看起来很好。对于它的工作原理,如果我cout<<从主函数开始[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;

}

1 个答案:

答案 0 :(得分:0)

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

删除ch = input.get();,您将正确阅读每个号码。

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

同样,请考虑更改以下条件以确保正确的endl展示位置

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

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