为什么这段代码每次都卡死?

Why does this piece of code freeze everytime?

// program to check if a number is a perfect square or not.
#include<stdio.h>
    
    double perfect_square(double number)
    {
        step:
        for (int i = 1; i<=number; i++)
        {
            if (i*i == number)
            {
                return number;
            }
            else
            {
               goto step;
            }
    
        }
        return 0;
    }
    
    int main ()
    {
        double N;
        printf("Enter a number: ");
        scanf("%lf", &N);
        double cube_decision = perfect_square(N);
        if (cube_decision == 0)
        {
            printf("It is not a perfect cube");
        }
        else 
        printf("It is a perfect cube."); 
        return 0;
    }

上面的程序让我输入一个数字,但我只是有点冻结,没有做任何事情。我尝试用 int variable 替换 every double variables 并将函数设为 return int type 它成功了,但我的问题是为什么当我使用 double 时这个程序突然死机了???

因为如果条件 i*i == number 为假,那么您将重新开始循环,从头开始(使用 int i = 1 部分)。 goto 会给你一个无限循环。

你不需要这里的goto,无论如何循环都会自动迭代:

double perfect_square(double number)
{
    for (int i = 1; i<=number; i++)
    {
        if (i*i == number)
        {
            return number;
        }
    }
    return 0;
}

作为一般规则,永远不要使用 goto 和标签。