C语言 当我使用不同的编译器时,我得到不同的输出



我试图用c来解决一个问题,但是我在不同的编译器中得到了不同的输出。首先,我尝试了gcc,没有错误,但当我使用clang时,输出发生了变化。

问题:
给定5个正整数,求出5个正整数中4个的和所能得到的最小值和最大值。然后将各自的最小值和最大值打印成一行两个空格分隔的长整数。

样本输入:1 2 3 4 5

样本输出:10 14

10 = 1 + 2 + 3 + 4 | 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 %dn", 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)。

假设您为非土耳其语使用者翻译了一些变量名为英语,则变量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 %dn", 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;
}

最新更新