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

#include <stdio.h> int main() { int arr[10]; for (int i = 0; i = 10; i++) { scanf("%d", &arr[i]); } int max1, max2; if (arr[0 > arr[1) { max1 = arr[0]; max2 = arr[1]; } else { max1 = arr[1]; max2 = arr[0]; } for (int i = 2; i <10; i++) { if (arr[i] > max1) { max1=arr[i]; max1 = max2; } else if(max2<arr[i]){ max2 = arr[i]; } } } } printf("%d", max1 + max2); return 0; }
这段代码的目的是从10个整数中找出最大的两个数,并输出它们的和。但代码中存在多个语法和逻辑错误。

- 第4行的循环条件 `i = 10` 是赋值语句,不是比较,应该使用 `i < 10` 或 `i <= 9`。这会导致循环无法正确执行。
- 第8行和第9行的数组索引和括号不匹配,`arr[0 > arr[1)` 缺少右括号,且比较符号位置错误。应该写成 `arr[0] > arr[1]` 的形式。
- 第17行 `max1 = max2;` 逻辑错误,当找到新的最大值时,应该把原来的最大值赋给 `max2`,而不是把 `max2` 赋给 `max1`。这里赋值方向反了。
- 代码末尾多了一个多余的右花括号 `}`,导致 `printf` 和 `return` 不在 `main` 函数内。