【问题标题】:Why is if not working in my Magic Square program [duplicate]为什么在我的 Magic Square 程序中不起作用 [重复]
【发布时间】:2018-01-05 06:02:57
【问题描述】:

这是一个 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?明明所有的总和都相等,为什么控制权会偏向其他部分?

【问题讨论】:

  • 另外说明,最好用 0 初始化变量和数组的元素 c[5], r[5], d1, d2 。尽管问题的实际错误在于 if 语句。
  • 您的代码在其中一条对角线上有错误,请参阅我的更新答案。

标签: c arrays if-statement


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

【讨论】:

  • 其实应该是d2 += ms[4-x][y];
  • 是的。更新了。
【解决方案2】:

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

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

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

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

【讨论】:

  • 你可以像这样链接相等运算符,因为程序做到了。但是,当您像这样链接相等运算符时,它很少能达到您的预期。
  • @JonathanLeffler 哈哈
猜你喜欢
  • 2014-01-09
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
相关资源
最近更新 更多