【发布时间】:2020-03-12 13:20:28
【问题描述】:
请原谅我的英语不好。
我已经写了几行来返回最大值,最小值,所有值的总和,并在输入五个整数时按升序排列所有值。
在编写时,当我需要放入 5 个整数时,我在声明一个 INT 数组时错误地写了“num[4]”。 但是当我使用 TDM-GCC 4.9.2 64 位版本编译时,它没有任何问题。当我意识到并更改为 TDM-GCC 4.9.2 32 位版本时,它没有。
这是我的全部代码;
#include<stdio.h>
int main()
{
int num[4],i,j,k,a,b,c,m,number,sum=0;
printf("This program returns max, min, sum of all values, and arranges all values in ascending order when five integers are input.\n");
printf("Please enter five integers.\n");
for(i=0;i<5;i++)
{
printf("Enter #%d\n",i+1);
scanf("%d",&num[i]);
}
//arrange all values
for(j=0;j<5;j++)
{
for(k=j+1;k<5;k++)
{
if(num[j]>num[k])
{
number=num[j];
num[j]=num[k];
num[k]=number;
}
}
}
//find maximum value
int max=num[0];
for(a=1;a<5;a++)
{
if(max<num[a])
{
max=num[a];
}
}
//find minimum value
int min=num[0];
for(b=1;b<5;b++)
{
if(min>num[b])
{
min=num[b];
}
}
//find sum of all values
for(c=0;c<5;c++)
{
sum=sum+num[c];
}
printf("Max Value : %d\n",max);//print max
printf("Min Value : %d\n",min);//print min
printf("Sum : %d\n",sum); //print sum
printf("In ascending order : "); //print all values in ascending order
for(m=0;m<5;m++)
{
printf("%d ",num[m]);
}
}
我是 C 和各种编程的新手,不知道如何搜索这些问题。我知道我在这里这样问的方式很不恰当,我真诚地向那些被这类提问帖子激怒的人道歉。但这是我最好的尝试,所以请不要责怪,但我愿意接受任何建议或提示。
谢谢。
【问题讨论】:
-
你真正的问题是“为什么这个错误出现在 32 位编译器而不是 64 位编译器”?
-
你有什么意见?程序是否会因任何输入而失败?
-
通常我会说 64 位和 32 位编译之间的区别在于使用的指令集。但在这种情况下,它可能也会影响编译器以 32 / 64 位块分配内存的方式。使用 32 位编译,事情可能会更紧密地打包在一起,没有足够的备用(已分配但未使用)来容纳
num中的额外项目,使用 64 位编译会有更多的松弛,额外的数据恰好下降进入一个未使用的区域并且不会导致异常或错误。
标签: c arrays 32bit-64bit