我试图解决使用C的问题,但在不同的编译器中得到了不同的输出。首先,我试了gcc,没有错误,但当我使用clang时,输出发生了变化。
问题:
给定五个正整数,通过精确地求和五个正整数中的四个,找到可以计算的最小值和最大值。然后将各自的最小值和最大值打印为两个空格分隔的长整数的一行。
样本输入:1 2 3 4 5
样本输出:10 14
10 =1+2+3+4 x 14 =2+3+4+5
当我使用clang:1 14
时的输出
以下是代码:
#include <stdio.h>
void miniMaxSum(int *a, int b) {
int sums[5] = { b, b, b, b, b };
int min = *a, max = *a;
for (int j = 0; j < 5; j++) {
sums[j] -= *(a + j);
if (sums[j] < min)
min = sums[j];
if (toplamlar[j] > max)
max = sums[j];
}
printf("%d %d\n", min, max);
}
int main() {
int numbers[5] = { 0, 0, 0, 0, 0 };
int sum;
for (int i = 0; i < 5; i++) {
scanf("%d ", &numbers[i]);
toplam += numbers[i];
}
miniMaxSum(numbers, sum);
return 0;
}
编辑:对不起,为了理解起见,我将变量名更改为英文,但忘记了toplam
(sum
)和toplamlar
(sums
)。
发布于 2022-04-29 13:56:28
假设您为非土耳其语者翻译了一些变量名为英语,变量sum
(toplam
)未初始化,导致未定义行为。未定义行为的一个常见症状是不同系统/编译器上的不同行为。
注意,只需搜索数组中的最小值和最大值,就可以简化代码:
#include <stdio.h>
void miniMaxSum(const int *a, int sum) {
int min = a[0], max = a[0];
for (int j = 1; j < 5; j++) {
if (sums[j] < min)
min = sums[j];
if (sums[j] > max)
max = sums[j];
}
printf("%d %d\n", sum - max, sum - min);
}
int main() {
int numbers[5] = { 0, 0, 0, 0, 0 };
int sum = 0;
for (int i = 0; i < 5; i++) {
scanf("%d ", &numbers[i]);
sum += numbers[i];
}
miniMaxSum(numbers, sum);
return 0;
}
https://stackoverflow.com/questions/72063982
复制