C ++ suduko拼图,初始化网格 - 新手

时间:2017-03-26 13:54:14

标签: c++ ifstream

我目前对C ++编码非常陌生,我正在尝试创建一个suduko解算器。我现在的任务是从文本文件中读取未解决的谜题,并将数字排序到正确的列,行和块数组中。

我以为我已经设法为行和列执行此操作(仍在处理块)但是当我逐步执行代码以查看它是否正在工作时,输入值似乎总是为-1。我认为这可能与我使用.get()获取值的事实有关,但是我对任何其他方法都毫无头绪。

我不相信它与文件本身有什么关系,因为我已经设法在它尝试初始化网格之前输出文件的内容。这是我初始化网格的方法:

 void SudokuPuzzle::InitialiseGrid()
 {
ifstream sudukoIn("sudoku_puzzle.txt");
while (!sudukoIn.eof()) {
    for (int row = 0; row < 9; ++row)
    {
        for (int column = 0; column < 9; ++column)
        {
            bool g = true;
            int value = sudukoIn.get();
            if (value == 0) 
            {
                g = false;
            }
            m_gridRows[row].setCell(column, new Cell(value, g));
            m_gridColumns[column].setCell(row, new Cell(value, g));
        }
      }
     }
   }       

我遇到的另一个问题是初始化3x3块。我最初的想法是使用if语句,如if row = 1,2或3和column = 1,2或3然后使索引1等。但是当写出来时它似乎非常低效,我想知道是否有人有任何更好的想法??

谢谢你, 露

1 个答案:

答案 0 :(得分:1)

void SudokuPuzzle::InitialiseGrid()
 {
ifstream sudukoIn("sudoku_puzzle.txt");
while (!sudukoIn.eof()) {
    for (int row = 0; row < 9; ++row)
    {
        for (int column = 0; column < 9; ++column)
        {
            bool g = true;
            int value;
            sudokuIn >> value;
            if (value == 0) 
            {
                g = false;
            }
            m_gridRows[row].setCell(column, new Cell(value, g));
            m_gridColumns[column].setCell(row, new Cell(value, g));
        }
      }
     }
   }     

使用流>>代替.get()