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

#include <stdio.h> enum { SIZE = 10 }; int main() { int A[SIZE]; for (int i = 0; i < SIZE; i++) { scanf("%d ", &A[i]); } int max_1 = A[0]; int max_2 = A[1]; for (int i = 0; i < SIZE; i++) { if (A[i] > max_1) { max_2 = max_1; max_1 = A[i]; } } for (int i = 0; i < SIZE; i++) { if (A[i] > max_2 && A[i] != max_1) { max_2 = A[i]; } } int sum = max_1 + max_2; printf("%d", sum); return 0; }
这段代码的目的是从10个整数中找出最大的两个数,并计算它们的和。代码整体思路正确,但存在一个细节问题。

- 在第一个循环中,`scanf("%d ", &A[i])` 格式字符串里多了一个空格,这会导致输入行为不符合预期,可能让程序等待额外输入或跳过某些值。建议检查 `scanf` 的格式字符串,确保它只读取一个整数。

- 在初始化 `max_1` 和 `max_2` 时,直接用了 `A[0]` 和 `A[1]`,但这两个值可能相等,或者数组元素顺序可能导致逻辑错误。考虑如果所有数都相同,或者最大值出现在前两个位置时,后续的更新逻辑是否仍然正确。