【发布时间】:2020-10-01 11:18:51
【问题描述】:
我的代码有问题。我正在尝试使用指针对数组进行排序。我遇到的问题是,当程序对数组进行排序时,它不会处理最后一个输入元素。到目前为止,我还不太习惯使用指针。我会很感激一些反馈。这是代码
#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)。有什么建议吗?
【问题讨论】:
-
为什么要从请求的数组大小中减一?
-
printf("%d", *(arr++));你先增加指针,然后读取值。 -
由于某种原因,该程序允许超过请求的输入大小。所以如果我输入 5,它允许我输入 6。
-
您的程序将使用索引而不是指针算法来简化。例如:
arr[i]而不是*(arr+i) -
如果你从零开始使用'for'循环,你的循环可能会更清晰,更容易处理,