【发布时间】: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