为什么这段代码每次都卡死?
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
和标签。
// 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
和标签。