Онлайн компилятор C

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

- 在 `main` 函数中,`void print_odds;` 这一行是错误的。这里你声明了一个名为 `print_odds` 的变量,类型是 `void`,这在 C 语言中是不允许的。正确的做法是直接调用函数 `print_odds();`,而不是重新声明它。
- 递归函数 `print_odds` 的逻辑本身是正确的:读取一个数,如果是 0 则结束,否则判断是否为奇数并打印,然后递归调用自身。但需要注意,递归调用会不断读取新的输入,直到遇到 0 为止。

- 检查 `main` 函数中 `void print_odds;` 这一行,思考如何正确调用一个函数。
- 确保 `print_odds` 函数在递归时能够正确终止,并且输入序列以 0 结尾。