2013-03-27 87 views
0

我正在编写读取一组数字的代码,然后将它们显示在屏幕上的4x4网格中,然后该程序将确定它是否为幻方。我的问题是,如何让用户将数字输入到readData方法中显示的文件中,以便在调用该方法时将显示用户网格。将网格写入文件

文件data.txt还存储在哪里?

感谢

#include<iostream> 
#include<fstream> 
using namespace std; 
const int dimension = 4; // dimension for the array 
typedef int Sq[dimension] [dimension]; // declare vector for type names 

void ReadData(Sq square) // read data from file 
{ ifstream inFile; 
    char fileName[13] = "data.txt"; 
    inFile.open (fileName); // open file for reading     
    for (int r = 0; r < dimension; r++) // row loop 
     for (int c = 0; c < dimension; c++) // column loop 
      inFile >> square[r][c]; // read data into matrix 
     inFile.close(); // close the file     
} 

void Display (const Sq square) // display matrix 
{ cout << " Magic Square Program " << endl << endl; 
for (int r = 0; r < dimension; r++) 
    { for (int c = 0; c < dimension; c++) 
     { cout.width(6); //set output width to 6 characters 
      cout << square[r][c] << "\t "; // display numbers 
      } 
     cout << endl; 
    }  
} 
bool magicSquare(Sq square) // add rows, columns, and diagonals 
{ int firstSum = 0, sum; 
    bool magic = true; 
    for (int r = 0; r < dimension; r++) // add 1st column for a comparison 
     firstSum += square[r][1]; 
    for (int r = 1; r < dimension; r++) // row loop first when adding rows 
     { sum = 0; 
     for (int c = 0; c < dimension; c++) 
      sum += square[r][c]; // add row 
     if (sum != firstSum) // check for magic failure 
       return (false); // not magic 
     } 

    for (int c = 0; c < dimension; c++) // column loop first when adding columns 
     { sum = 0; 
      for (int r = 0; r < dimension; r++) 
       sum += square[r][c]; // add columns 
       if (sum != firstSum) // check for magic failure 
       return (false); // not magic 
     } 
    sum = 0; 
    for (int r = 0; r < dimension; r++) 
      sum += square[r][r]; // add front diagonal 
     if (sum != firstSum) // check for magic failure 
      return (false); // not magic 
     sum = 0; 
     for (int r = 0; r < dimension; r++) 
      sum += square[r][dimension - r - 1]; // add back diagonal 
     if (sum != firstSum) // check for magic failure 
      return (false); // not magic 
     else 
      return (true); 
     } // end magicSquare function 

int main() 
{ 
    Sq square; 
ReadData(square); // read data from file 
Display (square); // display matrix 
if (magicSquare(square)) // check for magic property 
    cout << "\n This Square is Magic \n " << endl; 
else 
    cout << "\n This Square is Not Magic \n " << endl; 
system("Pause"); 
return(0); 
} 
+0

代码太多,眼睛受伤。你能缩小一点吗? – 2013-03-27 13:53:39

回答

0

我的问题是如何获得用户输入的是在READDATA方法显示的数字到一个文件?

问礼貌地?由于它是磁盘上的文件,用户必须在之前的程序启动时填写它。如果文件不存在,则可以使用适当的ifstream标志来创建文件而不是,然后显示错误消息,之后终止程序。

此外,文件data.txt存储在哪里?

在二进制文件的当前执行路径中。这可能是也可能不是二进制文件所在的文件夹。

请注意,因为您正在使用C++,所以std::array<>可能比C风格的阵列更适合。

2

最简单的方法是让程序以文件名作为命令行参数。 Main应该看起来像这样,其中argc是参数的个数,argv[]是和它们的字符指针数组(argv[0]始终是可执行文件的名称)。见What does int argc, char *argv[] mean?

int main(int argc, char * argv[]) 

那么,你做

if (argc == 2) 
{ 
    ReadData(square, argv[1]); 
    ... 
} 
else 
    ... 

而且READDATA应该是这样的: -

void ReadData(Sq &square, const std::string &filename) // read data from file 
{ 
    ifstream inFile; 
    inFile.open (filename); // open file for reading 

注意!您需要将平方当作参考参数(&square),否则您的输入数据会被忽略。