Довольно много моего вывода правильно, im читает i массивы из файла и суммирует их ряды, столбцы и диагональные итоги. Все работает отлично, за исключением моего логического значения isMagic(). если все суммы равны, тогда верните true, а если нет, то верните false;My boolean возвращает false каждый раз, C++, массивы, Magic Box
При кодировании метода для правых и левых диагональных сумм я ввел (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++;
}
}
Что вы думаете «коробка [размер] [размер]» будет делать? Ваш массив представляет собой статическую переменную с одной строкой (или, может быть, с нулевыми строками) и десятью столбцами. – gnasher729
Иногда это помогает разбить код на самый маленький код, который демонстрирует проблему. Очень часто это добавляет ясности, и вы можете решить сами. –
Да, я не знаю, что вы думаете, 'box [size] [size]' делает, но это определенно не делает этого. _Пожалуйста, начинайте отступать правильно (это физически больно читать), особенно в условных блоках; GCC 6 будет иметь полевой день с этим кодом из-за того, как вводить в заблуждение некоторые из ваших отступов, - и это может привести к тому, что вы сделаете очень большой день. По той же причине, пожалуйста, всегда используйте фигурные скобки вокруг условных блоков, так как опускайте их там, где _possible_ просто приглашает ужасные ошибки позже, где вы действительно не должны. –