2 u010231545 u010231545 于 2013.12.04 11:23 提问

if(scanf("%d", array + i) != 1)运行到这句,程序停止,联机检查是怎么回事??

/*
**读取、排序和打印一列整型值。
*/

#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;

}

2个回答

liuyy2007
liuyy2007   2013.12.04 14:06
已采纳

你的程序又两个问题
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).

  1. 最后打印的时候

    /*
    打印这些值。
    /
    for(i = 0;i < n_values; i += 1)
    printf("%d\n", *
    &array + i
    );

应该是*(array+i)

希望对你有帮助

u010231545
u010231545 额,按照你的改了可以了,谢谢啊!!!
大约 4 年之前 回复
lingfeng_95
lingfeng_95   2013.12.19 13:24

提问
问题标签用户
if(scanf("%d", array + i) != 1)
应该加上&

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!