为什么不在我的Magic Square计划中工作呢?

时间:2017-07-29 05:56:41

标签: c arrays if-statement

这是C中用于检查矩阵是否为幻方的程序。 所有行和列的总和以及两个对角线都等于65.这显示在printf语句中。然而if-else返回0而不是1.为什么?

#include<stdio.h>

int c[5], r[5];
int d1, d2;
int ms[5][5] = {
{25, 13, 1, 19, 7},
{16, 9, 22, 15, 3},
{12, 5, 18, 6, 24},
{8, 21, 14, 2, 20},
{4, 17, 10, 23, 11}};

//to calculate sums of every row, column and both diagonals
void sumUp() {
for (int x = 0; x < 5; x++)
    for (int y = 0; y < 5; y++) {
        r[x] += ms[x][y];
        c[x] += ms[y][x];
        if (x == y) {
            d1 += ms[x][y];
            d2 += ms[y][x];
        }
    }
}


//prints sums calculated
//returns 1 if all sums equal
int isMagic() {
    printf("\n%d", r[0]);
    printf("\n%d", r[1]);
    printf("\n%d", r[2]);
    printf("\n%d", r[3]);
    printf("\n%d", r[4]);
    printf("\n%d", c[0]);
    printf("\n%d", c[1]);
    printf("\n%d", c[2]);
    printf("\n%d", c[3]);
    printf("\n%d", c[4]);
    printf("\n%d", d1);
    printf("\n%d", d2);

    //every sum prints equal to 65
    if (c[0] == c[1] == c[2] == c[3] == c[4] == r[0] == r[1] == r[2] == r[3] == r[4] == d1 == d2) //yet this does not work
        return 1; 
    else 
        return 0;
}

void show() {
    if (isMagic())
        printf("\nYes, Magic");
    else
        printf("\nNot Magic");
}

int main() {

    sumUp();

    show();
    return 0;
}

究竟为什么if-else返回0?当显然所有金额相等时,为什么控制权转向其他部分?

2 个答案:

答案 0 :(得分:1)

你不能像这样链接相等运算符。表达式

c[0] == c[1]

评估为01,因此表达式为

c[0] == c[1] == c[2]

仅在

时才为真
  • c[0]c[1]相同,c[2]为1,或
  • c[0]c[1]不相等,c[2]为0

您可以使用&&运算符(逻辑AND)来编写if语句,如下所示

if ( c[0] == c[1] && c[0] == c[2] && ...

答案 1 :(得分:1)

这不起作用,因为第一个==的结果是真或假,它不等于第二个中的整数。你需要

If(c[1] == c[2] && c[2] == c[3] && c[3] == c[4]  etc

此外,第二个对角线计算的逻辑不正确。当x == y时,ms [x] [y]与ms [y] [x]相同。你正在研究d1两次!相反,你需要:

d2 += ms[4-x][y];