在线编译器 C

#include <stdio.h> void print_odds(void) { int n, i = 1; scanf ("%d ", &n); if (n == 0) { return; } if(i % 2 == 0){ printf("%d", n); } i++; print_odds(void); return; } } int main() { print_odds(void); return 0; }
这段代码试图通过递归函数读取整数并打印其中的奇数,但存在几个问题。

- 函数 `print_odds` 中变量 `i` 每次递归调用都会被重新初始化为1,无法正确记录当前是第几个数。递归调用时 `i` 的值不会保留。
- 递归调用 `print_odds(void)` 的写法是错误的,调用函数时不需要写 `void`,直接写 `print_odds()` 即可。
- 函数定义末尾多了一个多余的右花括号 `}`,导致语法错误。
- 判断奇数的条件写成了 `i % 2 == 0`,但 `i` 是计数器,应该判断输入的数值 `n` 是否为奇数,即 `n % 2 != 0`。

- 检查递归调用时如何传递或更新计数器,思考如何让每次递归都知道当前是第几个数。
- 确认判断奇数的条件是否正确,应该检查输入的数字本身,而不是计数器。