我有以下来源,当我执行它时,值会改变它们的符号。我无法找出出错的地方。任何建议都有帮助
代码
#include <stdio.h>
#include <stdlib.h>
int arrsort(int *arr, int size);
int display(int *arr, int size);
int main()
{
int s_o_1=0, s_o_2=0;
int i; //index for arrays
int a[s_o_1],b[s_o_2];
printf("enter the size of the first array\n");
scanf("%d",&s_o_1);
printf("Enter the values of the first array\n");
for (i=0;i<s_o_1;i++)
{
scanf("%d",&a[i]);
}
printf("enter the size of the second array\n");
scanf("%d",&s_o_2);
printf("Enter the values of the second array\n");
for (i=0;i<s_o_2;i++)
{
scanf("%d",&b[i]);
}
//sort the first array
arrsort(a,s_o_1);
printf("The sorted first array is\n");
display(a,s_o_1);
//sort the second array
arrsort(b,s_o_2);
printf("The sorted second array is\n");
display(b,s_o_2);
}
int arrsort(int *arr, int size)
{
int temp; //for holding the temp value
int i; //for indexing
int j;
for(j=0;j<size;j++)
{
for(i=0;i<size;i++)
{
if(arr[i]>arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}
int display(int *arr, int size)
{
int i; //array index
for (i=0;i<size;i++)
{
printf("%d\t",i);
}
printf("\n");
for (i=0;i<size;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
}
输出
enter the size of the first array
5
Enter the values of the first array
1 5 -10 -15 3
enter the size of the second array
5
Enter the values of the second array
-3 -5 15 9 10
The sorted first array is
0 1 2 3 4
-15 -10 3 5 10
The sorted second array is
0 1 2 3 4
-15 -10 -5 -3 9
答案 0 :(得分:2)
问题是数组声明:
int s_o_1=0, s_o_2=0;
int i; //index for arrays
int a[s_o_1],b[s_o_2];
数组可能以大小为0声明。要么以适当的最大大小声明,要么在读取数组的大小后声明。
答案 1 :(得分:1)
您的代码有未定义的行为。在这一行:
int a[s_o_1],b[s_o_2];
它声明零大小的数组。稍后获取s_o_1和s_o_2的值时,数组大小不会更改。所以你所有的阅读和阅读写导致未定义的行为。
C标准要求数组的长度应为非零。
答案 2 :(得分:1)
保留记忆的方式不正确int a[s_o_1],b[s_o_2];
您必须在int *a, *b;
之后使用scanf("%d",&s_o_1);
,然后才需要执行a = (int*)malloc(sizeof(int)*s_o_1);
之类的操作
为b分配内存也是如此。
冒泡排序alghorithm也应该像bellow
for(j=0;j<size - 1;j++)
{
for(i=j + 1;i<size;i++)
{
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}