2016-04-22 4 views
-1

私の出力はかなりです。ファイルから配列を読み込み、行、列、および対角線の合計を集計しています。 isMagic()のブール値を除いてすべて正常に動作します。すべての合計が等しい場合はtrueを返し、そうでない場合はfalseを返します。私のブール値は毎回falseを返しています。C++、配列、Magic Box

右と左の対角の和のためのメソッドをコーディングするとき、私はこれらのintをrowTotal(row)とcolTotal(col)と比較することができないので、私は(int size)を入力しました。私の全体的なコードには影響しません。私は正しく返すためにブール値が必要です。何か案は?

// 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

「ボックス[サイズ] [サイズ]」とは何と思いますか?あなたの配列は、1行(またはゼロ行)と10列の静的変数です。 – gnasher729

+3

場合によっては、問題を示す最小コードにコードを移動させることができます。非常に頻繁にこれは明快さを追加し、あなた自身を解決することができます。 –

+1

はい、私はあなたが 'box [size] [size]'が何をしていると思いますかは分かりませんが、それは間違いありません。 _Please_は適切に字下げを開始します(これは物理的には読み込みに痛い)。 GCC 6は、あなたのインデントの誤解を招くことがあるため、このコードを使用して1日のフィールドを持つことになります。同じ理由から、条件ブロックの周りには、常にあなたが実際にどこにいらっしゃるのではないかという恐ろしいエラーを招く場所を省略して、常に括弧を使用してください。 –

答えて

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

私はそれらをint型として返すので、整数型値と見なされたと思います。 –

+0

@ Cpt.Awesome:解決策では、関数呼び出しの結果は整数で格納されています。その後、整数が比較されます。比較が 'bool'型を返します。関数を実行するための構文を確認する必要があります。 –

関連する問題