2016-04-22 77 views
-1

我的輸出很正確,即時讀取文件中的數組,並且總結他們的行,列和對角線總數。除了我的布爾值isMagic(),一切正常。如果所有的和都相等,則返回true,否則返回false;我的布爾值每次都返回false,C++,arrays,Magic Box

當編碼我輸入的左右對角線和的方法(int大小),因爲它不允許我將這些int與rowTotal(row)和colTotal(col)進行比較..只要我可以告訴這個不影響我的整體代碼。我只需要布爾值就可以正確返回。有任何想法嗎?

// Purpose: Magic BOX... 
#include <iostream> 
#include <cstdlib> 
#include <fstream> 

using namespace std; 

int size= 0; 
int box [][10]= {}; 

void ReadIn(ifstream& fin) 
{ 
    box[size][size]; 
     for(int i = 0; i<size;++i) 
     { 
      for(int j= 0; j<size;++j) 
       fin>> box[i][j]; 
     } 
    cout<<"\n"; 
} 

int rowTotal(int row) 
{ 
    int total = 0; 
    for(int i = 0; i<size; ++i) 
     total+= box[row][i]; 
    return total; 
} 

int colTotal(int col) 
{ 
    int total = 0; 
    for(int i=0; i<size; ++i) 
     total += box[i][col]; 
    return total; 
} 

int rightdiagonal(int size) 
{ 
    int total = 0; 
    for(int i=0; i<size; ++i) 
     total+= box[i][i]; 
     return total; 
} 

int leftdiagonal(int size) 
{ 
    int total = 0; 
    int j=size-1; 
    for(int i=0; i<size; ++i) 
     { 
      total+= box[i][j]; 
      j--; 
     } 
     return total; 
} 
bool isMagic() 
{ 
    if(rowTotal != rightdiagonal) 
     return false; 
    if(colTotal != rightdiagonal) 
     return false; 
    if(rightdiagonal != leftdiagonal) 
     return false; 

    else return true; 
} 

void print(int& count) 
    { 
     int row=0, col=0; 
     cout<< "==========="<<"\n"<< "===Box "<< count<<"==="<<"\n"<<"==========="<<endl; 
     for(int i = 0; i < size; ++i) 
       { 
        for(int j = 0; j<size; ++j) 
         { 
          cout<<box[i][j]<<" "; 
         } 
        cout<<"\n"; 
       } 
     cout<<"\n"; 

    } 


int main() 
{ 
    int count = 1; 
    ifstream fin ("magicbox.txt"); 
    fin>>size; 

    while(size != -1) 
    { 
     ReadIn(fin); 
     print(count); 
       for (int i=0; i<size; ++i) 
       { 
        int row=0; 
        rowTotal(row); 
        cout<<"The sum of row "<< row<< " is "<< rowTotal(row)<< endl; 
        row++; 
       } 
     cout<< "\n"; 
     for(int i = 0; i < size; ++i) 
       { 
        int col=0; 
        colTotal(col); 
        cout<<"The sum of column "<< col<< " is "<< colTotal(col)<< endl; 
        col++; 
       } 
      cout<<"\n"; 
      rightdiagonal(size); 
      cout<<"The sum of the right diagonal is " << rightdiagonal(size)<< endl; 

      leftdiagonal(size); 
      cout<<"The sum of the left diagonal is " << leftdiagonal(size)<< endl; 
     isMagic(); 
     if(isMagic() == true) 
      cout<<"This matrix IS a magic box!"<<endl; 
     else 
      cout<<"This matrix is NOT a magic box."<< endl; 

     fin>>size; 
     count++;  
    } 
} 
+2

你認爲「box [size] [size]」會做什麼?你的數組是一行(或可能爲零行)和十列的靜態變量。 – gnasher729

+3

有時它有助於將代碼去除到顯示問題的最小代碼。通常這增加了清晰度,你可以解決你自己。 –

+1

是的,我不知道你認爲'box [size] [size]'在做什麼,但它絕對不是這樣做的。 _請正確開始縮進(這實際上很難讀),特別是在條件塊中;由於誤導你的一些縮進 - GCC 6將會在這一天有一個這樣的代碼 - 這可能會導致你在一天之後的一天。出於同樣的原因,請考慮總是圍繞有條件的塊使用大括號,因爲忽略它們,可能會在以後發生可怕的錯誤,而這些錯誤在以後你真的不應該這樣做。 –

回答

1

這是完全錯誤的

bool isMagic() 
{ 
    if(rowTotal != rightdiagonal) 
     return false; 
    if(colTotal != rightdiagonal) 
     return false; 
    if(rightdiagonal != leftdiagonal) 
     return false; 

    else return true; 
} 

rowTotal和rightdiagonal的功能。這意味着什麼比較他們

你的意思

bool isMagic() 
{ 
int rd = rightDiagonal(size); 
int ld = leftDiagonal(size); 
if(ld != rd) 
    return false; 

// etc 
} 

你需要做大量的列總數和行總計求和太

還你不需要大小通入總額的功能,其一個全局變量

+0

因爲我把它們作爲整數返回,我認爲它們被認爲是整數值? –

+0

@ Cpt.Awesome:注意在解決方案中,函數調用的結果以整數存儲。整數然後進行比較。比較返回'bool'類型。您需要查看執行函數的語法。 –