在线编译器 C

#include <stdio.h> void print_simple(int n) { int i; for (i = 2; i * i <= n; i++) { while (n % i == 0) { printf("%d ", i); n = n / i; } } return i; } int main() { print_simple(5); return 0; }
这段代码试图实现一个函数,打印一个整数的所有质因数。它从2开始检查,如果当前数能整除n,就打印并除以它,直到不能整除为止。但代码存在几个问题。

- 函数`print_simple`的返回类型是`void`,但最后却写了`return i;`,这会导致编译错误。`void`函数不能返回值。
- 在`main`中调用`print_simple(5)`时,输入是质数5,循环条件`i * i <= n`在`i=2`时成立,但`5%2!=0`,循环结束后`n`仍然是5,此时应该打印剩下的质数5本身,但代码没有处理这种情况。