【问题标题】:My boolean is returning false every time, c++ , arrays, Magic Box我的布尔值每次都返回 false,c++,数组,Magic Box
【发布时间】:2016-08-16 13:01:52
【问题描述】:

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

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

【问题讨论】:

  • 你认为“box [size][size]”会做什么?你的数组是一个静态变量,有一行(或者可能是零行)和十列。
  • 有时它有助于将代码剥离为能说明问题的最小代码。通常这会增加清晰度,您可以自己解决。
  • 是的,我不知道您认为box[size][size] 在做什么,但它绝对没有这样做。 正确地开始缩进(这对阅读造成身体伤害),尤其是在条件块中;由于您的某些缩进具有误导性,GCC 6 将在此代码中度过一天 - 并且可能会导致您在一天后非常糟糕。出于同样的原因,请考虑始终在条件块周围使用大括号,因为在可能只会在以后真正不应该引发可怕错误的地方省略它们。

标签: c++ arrays methods boolean


【解决方案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
}

你也需要做很多列总和行总和

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

【讨论】:

  • 因为我将它们作为整数返回,所以我认为它们被视为整数值?
  • @Cpt.Awesome:注意在解决方案中,函数调用的结果以整数形式存储。然后比较整数。比较返回bool 类型。您需要查看执行函数的语法。
猜你喜欢
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2022-12-14
  • 2015-01-28
  • 1970-01-01
相关资源
最近更新 更多