有些数组的长度只有在运行时才知道,所以就用到了动态分配内存,下面的程序就是来演示读取一列整数,并按升序进行排列,并打印出来。
/* ** 读取,排序,打印一列整数值 */ #include <stdlib.h> #include <stdio.h> /* ** 该函数由‘qsort’调用,用于比较整型值(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; } int main() { int *array; int n_values; int i; /* ** 观察共有多少个值; */ printf("How many values are there?"); if( scanf( "d%", &n_values ) != 1 || n_values <= 0){ printf("不合法的输入。\n"); exit(EXIT_FALLURE); } /* ** 分配内存,用于存储这些值 */ array = malloc(n_values * sizeof( int )); if(array == NULL){ printf("不能够为数组获取内存。\n"); exit(EXIT_FALLURE); } /* **读取这些整数 */ for( i = 0; i<n_values; i += 1 ){ printf( "?" ); if( scanf("%d", array + i) != 1 ){ printf("错误的读取数值 #%d\n ", i); free( array ); exit(EXIT_FALLURE); } } /* ** 对这些值进行排序 */ qsort( array, n_values, sizeof( int ), compare_integers ); /* **打印这些值 */ for( i = 0; i < n; i += 1 ) printf("%d\n", array[i]) /* **释放内存并退出 */ free( array ) return EXIT_SUCCESS; }