我的代码有问题。我正在尝试使用指针对数组进行排序。我遇到的问题是,当程序对数组进行排序时,它不会处理最后一个输入元素。到目前为止我还不太习惯使用指针。我希望得到一些反馈。这是代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void inputarray(int *arr, int size);
void printarray(int *arr, int size);
void sortascending(int *arr, int size);
int main()
{
int array_size, array[MAX],choice;
printf("Enter size of array:\n");
scanf("%d",&array_size);
array_size -= 1;
printf("Enter elements:\n");
inputarray(array, array_size);
printf("Sorting scending:\n");
sortascending(array, array_size);
printarray(array, array_size);
return 0;
}
void inputarray(int *arr, int size)
{
int *arrayend = arr + size - 1;
while(arr <= arrayend)
{
scanf("%d\n",arr++);
}
}
void printarray(int *arr, int size)
{
int *arrayend = arr + size-1;
while(arr <= arrayend)
{
printf("%d", *(arr++));
}
}
void sortascending(int *arr, int size)
{
int *arrayend = arr + size - 1;
int i,j,t;
for(i=0; i< size; i++)
{
for(j=i+1; j< size; j++)
{
if(*(arr+j)<*(arr+i))
{
t = *(arr+i);
*(arr+i) = *(arr+j);
*(arr+j) = t;
}
}
}
}
所以基本上,如果我按照 9,8,7,6,5 的顺序输入 5 个元素,它将返回 6,7,8,9,忽略最后一个输入元素(即 5)。有什么建议吗?
最佳答案
我发现在将 array_size 作为输入后,您将其减 1,这是不必要的。这是因为在所有函数中,您正在执行 arrend = arr + size - 1,即,您正在执行 arrend = arr[size-1]。当大小是数组的实际大小时,此方法有效。因此,您无需在 main 函数内递减 array_size 。 工作代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
void inputarray(int *arr, int size);
void printarray(int *arr, int size);
void sortascending(int *arr, int size);
int main()
{
int array_size, array[MAX],choice;
printf("Enter size of array:\n");
scanf("%d",&array_size);
//no need to decrement size here
printf("Enter elements:\n");
inputarray(array, array_size);
printf("Sorting scending:\n");
sortascending(array, array_size);
printarray(array, array_size);
return 0;
}
void inputarray(int *arr, int size)
{
int *arrayend = arr + size - 1;
while(arr <= arrayend)
{
scanf("%d",arr++);
//remove \n from above line
}
}
void printarray(int *arr, int size)
{
int *arrayend = arr + size-1;
while(arr <= arrayend)
{
printf("%d", *(arr++));
}
}
void sortascending(int *arr, int size)
{
int *arrayend = arr + size - 1;
int i,j,t;
for(i=0; i< size; i++)
{
for(j=i+1; j< size; j++)
{
if(*(arr+j)<*(arr+i))
{
t = *(arr+i);
*(arr+i) = *(arr+j);
*(arr+j) = t;
}
}
}
}
关于c - 使用指针对数组进行排序 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62330730/