c - 为什么这段代码每次都冻结?
问题描述
// 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 变量替换每个double变量并使函数返回int 类型并且它工作但我的问题是为什么这个程序在我使用 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
和标签。
推荐阅读
- java - 同步方法()仅运行 1 个线程,直到从几个轮询结束
- redux - Todo 应用示例:控制台未显示错误但应用无法运行
- typescript - 针对不同客户的不同错误响应 - 软件设计/架构
- amazon-web-services - AWS AppSync - 指令“aws_subscribe”不能用于 FIELD_DEFINITION
- bash - 如何在 Bash 中使用 getopts 接受长参数?
- sql - 过滤特定日期
- spring-boot - Spring Cloud Data Flow s3 sink - 403错误>我们计算的请求签名与您提供的签名不匹配
- php - 视图在 laravel 中不起作用
- excel - 在 VBA 中将文本转换为日期会产生时间值
- python - 尝试在 Python 中不提供用户名/密码凭据的情况下测试数据库连接