在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); int x, y; scanf("%d", &x); int max = x, min = x; for (int i = 0; i < n; i++) { scanf("%d", y) if (y > max) { max = y; } if (y < min) { min = y; } } int result = max - min; printf("%d", result); return 0; }
这段代码的目的是从用户输入的一系列整数中找出最大值和最小值,然后计算它们的差值并输出。代码整体思路正确,但存在几个语法错误。

- 第12行的 `scanf` 语句缺少了右括号,并且后面直接跟了 `if`,这是不正确的语法。`scanf` 的调用需要用分号结束,然后另起一行写 `if` 语句。
- 第12行中 `scanf("%d", y)` 的第二个参数应该是 `&y` 而不是 `y`,因为 `scanf` 需要变量的地址来存储输入的值。
- 循环变量 `i` 从0开始,但循环体内部在第一次迭代时就已经读取了一个数,而实际上第一个数已经在循环前通过 `scanf("%d", &x)` 读取了。这意味着循环会多读取一次,导致读取的总数比 `n` 多1。你需要调整循环的起始值或循环次数,确保总共只读取 `n` 个数。