我想创建一个程序,该程序将使用goto语句而不是循环来计算阶乘,而问题是为什么goto'阶乘'在'阶乘:'之前重复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;
}
当我将goto factorial放入if语句中时,一切工作正常:
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/