2013-03-27 93 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),否則您的輸入數據會被忽略。