u010231545
acmwo2013
采纳率100%
2013-12-04 03: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 roy_ss7 8年前

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

    希望对你有帮助

    点赞 1 评论 复制链接分享
  • lingfeng_95 凌风95 8年前

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

    点赞 评论 复制链接分享

相关推荐