我的代码有问题。我正在尝试使用指针对数组进行排序。我遇到的问题是,当程序对数组进行排序时,它不处理最后一个输入元素。到目前为止,我还不太习惯使用指针。我希望能得到一些反馈。这是代码
#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]。当size为数组的实际大小时,此方法有效。因此,您无需在主函数中递减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;
}
}
}
}