如何在Sudoku中打开文件?

时间:2016-08-20 01:24:26

标签: c++ c++11

我正在尝试为Sudoku编写程序。数独运行输入文件很好。但我想做一些在编译器中输入文件的更改。它捕获错误,就像没有匹配的成员函数来调用'open'一样。这只是我程序的一部分,因为我认为我的问题是I / O文件。任何帮助表示赞赏!谢谢!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <string>

using namespace std;

int main()
{
char filename;
ifstream myfile;
//int row,column;
int choice;
cout << "Enter the desired sudoku 4 for (4x4) or 9 for (9x9) : \n";
cin >> choice;

if(choice == 9) {

    for(int row = 0; row < 9; row++) // iterating the loop to assign initial dummy values
    {
        for(int column = 0; column < 9; column++)
        {
            sudoku[row][column] = 0; // assigining zeros
        }
    }
    cout << "Enter the filename:" << endl;
    cin >> filename;
    myfile.open(filename); // opening the file mentioned
    cout << "The values in the file are :" << endl;
    if (myfile.is_open())
    {
        while (!myfile.eof())
        {
            for(int row = 0; row < 9; row++) // iterating the loope to get the values form the file
            {
                for(int column = 0; column < 9; column++)
                {
                    myfile >> sudoku[row][column]; // assigning the values to the grid
                    cout << sudoku[row][column] << endl; // printing the grid
                }
            }
        }
    }
    myfile.close(); // closing the file
    solvesudoku(0,0);//We start solving the sudoku.
}

else if(choice == 4) {

    for(int row = 0; row < 4; row++) // iterating the loop to assign initial dummy values
    {
        for(int column = 0; column < 4; column++)
        {
            sudoku1[row][column] = 0; // assigining zeros
        }
    }
    cout << "Enter the filename:" << endl;
    cin >> filename;
    myfile.open(filename); // opening the file mentioned
    cout << "The values in the file are :" << endl;
    if (myfile.is_open())
    {
        while (!myfile.eof())
        {
            for(int row = 0; row < 4; row++) // iterating the loope to get the values form the file
            {
                for(int column = 0; column < 4; column++)
                {
                    myfile >> sudoku1[row][column]; // assigning the values to the grid
                    cout << sudoku1[row][column] << endl; // printing the grid
                }
            }
        }
    }
    myfile.close(); // closing the file
    solsudoku(0,0);//We start solving the sudoku.
}
else {
    cout << "Invalid Choice..!!!";
 }
return 0;
}

1 个答案:

答案 0 :(得分:2)

您的filename变量的类型为char。这是一个可以存储一个“字符”的整数值。

当编译器说没有fstream构造函数采用char类型的文件名时,编译器是正确的。

您可能需要char[SOME_BUFFER_SIZE],或理想情况下std::string

请注意,如果您使用std::string并转移到C ++ 03编译器,则在将c_str()传递给fstream时,您必须附加{{1}},由于历史原因。