Online Compiler C

#include <stdio.h> int f(int x) { int num=0; if(x<-2){ num=4; } if(x>=-2 && x<=2){ num=x*x; } if(x>2){ num=x*x+4*x+5; } return num; } int main() { int answer=0,n,save_n; scanf("%d",&n); save_n=n; while(n!=0){ answer=f(n); if(save_n<n){ save_n=n; } } printf("%d",answer); return 0; }
这段代码定义了一个分段函数 f(x),并在 main 中读取一个整数 n,然后进入一个 while 循环。循环中反复调用 f(n),但循环条件 n!=0 永远为真,因为循环体内没有改变 n 的值,所以这是一个死循环。另外,变量 save_n 的更新逻辑似乎是想记录最大值,但比较方向反了,而且也没有在循环中更新 n 的新输入。

- 你的 while 循环缺少改变 n 的语句,比如在循环内再次调用 scanf 读取新的 n,否则循环会无限执行下去。
- 变量 save_n 的更新条件 if(save_n<n) 看起来是想保存最大值,但初始 save_n 等于第一个 n,之后没有新输入,这个比较没有意义。你需要明确程序的目标是处理多个输入还是单个输入。