gpt4 book ai didi

c - 为什么 goto 'label' 会重复 'label:' 之前的语句?

转载 作者:行者123 更新时间:2023-11-30 18:33:29 29 4
gpt4 key购买 nike

我想创建一个程序,用 goto 语句而不是循环来计算阶乘,问题是为什么 goto 'factorial' 在 'factorial:' 之前重复 scanf?

问题出现在这段代码中:

int main(void) {

int number;
double n;

scanf("%d", &number);
n = number;

factorial:
if (number > 1) {
--number;
n *= number;
}
goto factorial;

printf("n! = %f", n);

return 0;
}

当我在 if 语句中放入 goto 阶乘时,一切正常:

int main(void) {

int number;
double n;

scanf("%d", &number);
n = number;

factorial:
if (number > 1) {
--number;
n *= number;
goto factorial;
}

printf("n! = %f", n);

return 0;
}

最佳答案

这段代码

factorial:
if (number > 1) {
--number;
n *= number;
}
goto factorial;

产生无限循环。你可以这样想象

factorial:
// some calculations
goto factorial;

在此代码片段中

factorial:
if (number > 1) {
--number;
n *= number;
goto factorial;
}

只有当 number 大于 1 时,才会执行 goto 语句。因此,一旦 number 等于 0,控制就会传递到 if 语句之外,并相应地绕过 goto 语句。

关于c - 为什么 goto 'label' 会重复 'label:' 之前的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57159617/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com