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

#include <stdio.h> void print_1_to_n(int n){ int i = 1; scanf("%d",&n); while(i<=n,i++){ printf("%d",i); } } int main() { int x; scanf("%d",&x); print_1_to_n(x); return 0; }
这段代码试图实现一个从1打印到n的函数,但存在几个问题。函数`print_1_to_n`内部又用`scanf`读取了n的值,导致传入的参数被覆盖。同时`while`循环的条件写法有误,逗号运算符会返回最后一个表达式的值,导致循环逻辑不正确。

- 函数`print_1_to_n`已经通过参数接收了n的值,不需要在函数内部再用`scanf`读取n。去掉内部的`scanf`,直接使用参数n。
- `while(i<=n,i++)`中的逗号运算符会先判断`i<=n`,然后执行`i++`,但循环条件实际是`i++`的结果(非零则继续),这会导致循环次数和预期不同。应该将条件判断和递增分开,比如使用`while(i <= n)`,然后在循环体内或循环末尾递增i。