请教个问题.关于malloc及自动排序的错误.(源代码见内)
#include "stdafx.h "
int compare_integers(const void *a, const void *b)
{
return * (int *)a - * (int *)b;
}
int main(int argc, char* argv[])
{
int *array;
int n_values;
int i;
printf( "How many values are there? ");
if((scanf( "%d ", &n_values) != 1) || n_values <= 0)
{
printf( "Illegal number of values.\n ");
exit(EXIT_FAILURE);
}
array = (int *)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( "? ");
if(scanf( "%d ", array + 1) != 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;
}
输入大小10,及十个数字.
How many values are there?10
?2
?3
?4
?1
?5
?7
?8
?6
?0
?9
-842150451
-842150451
-842150451
-842150451
-842150451
-842150451
-842150451
-842150451
-842150451
9
Press any key to continue
打印成这样.自己实在查不出问题所在.
[解决办法]
if(scanf( "%d ", array + 1) != 1)
改成
if (scanf( "%d ", array++) != 1)