/*
**讀取、排序和打印一列整型值。
*/
#include
#include
/*
**該函數由‘qsort’調用,用於比較整型值 。
*/
int compare_integers( void const *a, void const *b )
{
register int const *pa = a;
register int const *pb = b;
return *pa > *pb ? 1: *pa < *pb ? -1 : 0;//*pa>*pb其結果是
//1,否則執行(*pa<*pb?-1:0),即*pa<*pb結果為-1,兩者相等為0。
}
int main()
{
int *array;
int n_values;
int i,a;
/*
**觀察共有多少個值。
*/
printf("How many values are there?");
if(scanf("%d",&n_values) != 1|| n_values <= 0)
{
printf("Illegal number or values.\n");
exit(EXIT_FAILURE);
}
/*
**分配內存,用於存儲這些值。
*/
//printf("%d\n",n_values);
array = malloc(n_values * sizeof(int));
if(array = NULL)
{
printf("Can't get memory for that many values.\n");
exit(EXIT_FAILURE);
}
/*
**讀取這些值。
*/
for(i = 0;i < n_values;i += 1)
{
printf("?");
//printf("%d",a);
//getchar();
if(scanf("%d", array + i) != 1)
{
printf("Error reading value #%d\n",i);
free(array);
exit(EXIT_FAILURE);
}
}
/*
**對這些值排序。
*/
qsort(array, n_values,sizeof(int),compare_integers);
/*
**打印這些值。
*/
for(i = 0;i < n_values; i += 1)
printf("%d\n",&array + i);
/*
**釋放內存並退出。
*/
free(array);
return EXIT_SUCCESS;
}
你的程序又兩個問題
1. 你自己所說的運行停止,聯機檢查
/*
**分配內存,用於存儲這些值。
*/
//printf("%d\n",n_values);
array = malloc(n_values * sizeof(int));
**if(array = NULL)**
{
printf("Can't get memory for that many values.\n");
exit(EXIT_FAILURE);
}
你把array賦值成NULL了,應該是 if(array == NULL).
最後打印的時候
/*
打印這些值。
/
for(i = 0;i < n_values; i += 1)
printf("%d\n", *&array + i );
應該是*(array+i)
希望對你有幫助