2016-04-22 4 views
-1

Довольно много моего вывода правильно, 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++;  
    } 
} 
+2

Что вы думаете «коробка [размер] [размер]» будет делать? Ваш массив представляет собой статическую переменную с одной строкой (или, может быть, с нулевыми строками) и десятью столбцами. – gnasher729

+3

Иногда это помогает разбить код на самый маленький код, который демонстрирует проблему. Очень часто это добавляет ясности, и вы можете решить сами. –

+1

Да, я не знаю, что вы думаете, 'box [size] [size]' делает, но это определенно не делает этого. _Пожалуйста, начинайте отступать правильно (это физически больно читать), особенно в условных блоках; GCC 6 будет иметь полевой день с этим кодом из-за того, как вводить в заблуждение некоторые из ваших отступов, - и это может привести к тому, что вы сделаете очень большой день. По той же причине, пожалуйста, всегда используйте фигурные скобки вокруг условных блоков, так как опускайте их там, где _possible_ просто приглашает ужасные ошибки позже, где вы действительно не должны. –

ответ

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

Поскольку я вернул их как ints, я думал, что они считаются целыми значениями? –

+0

@ Cpt.Awesome: Обратите внимание, что в решении результаты вызовов функций хранятся в целых числах. Затем сравниваются целые числа. Сравнение возвращает тип 'bool'. Вам нужно просмотреть синтаксис для выполнения функций. –

Смежные вопросы