我的布尔值每次都返回false,c ++,数组,Magic Box

时间:2016-04-22 19:08:20

标签: c++ arrays methods boolean

我的输出几乎是正确的,我正在读取文件中的数组,并总结它们的行,列和对角线总数。除了我的布尔值isMagic()之外,一切正常。如果所有总和相等则返回true,否则返回false;

编码我输入的右和左对角线和的方法(int size),因为它不允许我将这些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++;    
    }
}

1 个答案:

答案 0 :(得分: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
}

你需要做很多列总计和行总计求和

你也不需要将大小传递给总计函数,它是一个全局变量