这个c程序有什么问题?调试它表明程序被击中 while (sqroot != 0);

What's wrong with this c program? Debugging it suggests that the program is struck at while (sqroot != 0);

Here's a screenshot of debugging process
我正在学习用 C 语言编程。我试图找出一个数字是否是镜像,但是程序编译无误但没有给出预期的结果。调试程序发现它在 while (sqroot != 0);

    // Mirror number
    #include <stdio.h>
    #include <math.h>
    int main() {
            int num, rev1, rev2, rem1, rem2, sqr, sqroot;
            printf("Enter a number\n");
            scanf("%d", & num);
            sqr = pow(num, 2);
            while (sqr != 0) {
                    rem1 = sqr % 10;
                    rev1 = rev1 * 10 + rem1;
                    sqr = sqr / 10;

            }
            sqroot = sqrt(rev1);

            while (sqroot != 0); {
                    rem2 = sqroot % 10;
                    rev2 = rev2 * 10 + rem2;
                    sqroot = sqroot / 10;
            }

            if (rev2 == num)
                    printf("number is mirror");
            else
                    printf("Not a mirror number");

            return 0;
    }

while (sqroot != 0); { ... } 是一个无限循环。因为 ; 被认为是一个空指令。 if (condition)while (condition) 之后的指令(是否为空)被认为是 if、[=17] 的 唯一 指令=], for 范围。

和写一样

while (sqroot != 0)
{
    ; /* Do nothing */
}
/* The scope below doesn't belong to the while */
{
    rem2 = sqroot % 10;
    rev2 = rev2 * 10 + rem2;
    sqroot = sqroot / 10;
}

去掉;,这个问题应该就解决了。

while (sqroot != 0) {
    rem2 = sqroot % 10;
    rev2 = rev2 * 10 + rem2;
    sqroot = sqroot / 10;
}

初始化为rev1=0和rev2=0.Because没有初始值,rev1和rev2将包含垃圾值,这样会出现运行时间错误。