gpt4 book ai didi

Printf() 和 Scanf() 的 C 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:11 25 4
gpt4 key购买 nike

我是 C 的新手,我遇到了一个我无法理解的段错误。我有以下程序,它试图计算一个严格正数的因子数:

#include <stdio.h>
#include <math.h>

int numberOfFactors (int number, int factor) {
if (number % factor == 0) {
number = number/factor;
return numberOfFactors(number, factor) + 1;
} else {
return 0;
}
}

int check (int x) {
if (x>0) {
return 1;
} else {
return 0;
}
}

int main(void) {
int number;
printf("Please enter a positive integer n such that n >= 1: ");
scanf("%d", &number);
if (check(number)){
int i;
for (i=1; i<=number; i++) {
int factors;
factors = numberOfFactors(number, i);
printf("%d^%d ", i, factors);
}
}
return 0;
}

在 main() 中的这些行之后输入整数和 ENTER 后立即发生段错误:

printf("Please enter a positive integer n such that n >= 1: ");
scanf("%d", &number);

这些行中的什么导致了段错误,我该怎么做才能避免它?

最佳答案

如果您尝试除掉因子 1,您的递归不会停止。

让因子永远不为 1:

    for (i=2; i<=number; i++) {
int factors;
factors = numberOfFactors(number, i);
printf("%d^%d ", i, factors);
}

我应该说为什么它会出现段错误:这是因为每个函数调用都会将当前程序计数器(您当前所在程序中的位置)和函数参数压入堆栈(也称为调用堆栈),其中堆栈相对较小用于函数调用和局部变量的内存块。

因此,如果您将堆栈推得太紧,它就会倒下。游戏结束,又名段错误;)

关于Printf() 和 Scanf() 的 C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144249/

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