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=0; while( scanf("%d",&n)==1){ answer=f(n); if(save_n<n){ answer=n; } } printf("%d",answer); return 0; }
这段代码定义了一个分段函数 f(x),并在 main 函数中从输入读取整数,对每个数调用 f 计算,但最终输出的逻辑有问题。

代码的主要问题是:main 函数中有一个变量 save_n 始终为 0,并且每次循环中如果当前输入的 n 大于 save_n,就把 answer 直接设为 n,而不是保留 f(n) 的结果。这样最终输出的 answer 实际上是最后一次满足 n > 0 的输入值,而不是函数 f 的计算结果。

- 检查 save_n 的用途:它从未被更新,所以条件 if(save_n < n) 实际上只判断 n 是否大于 0,这很可能不是你的本意。思考一下你想用 save_n 记录什么,以及应该在何时更新它。
- 注意 answer 被覆盖的问题:每次循环中 answer 先被赋值为 f(n),但随后又被可能被赋值为 n,导致 f 的计算结果丢失。考虑清楚你希望最终输出什么值,以及如何保留它。