champ_ 2023-06-05 16:52 采纳率: 92%
浏览 51
已结题

最后始终是 if语句报错,如何解决?


#include <stdlib.h>
int main()
{
    int n;
    scanf("%d", &n);
    int* p = (int*)malloc(n * sizeof(int));

    if (p == NULL)
    {
        printf("%s", strerror(errno));
    }
    int* p1 = p;     
                                            //p1
    int i;                                         //p
    for (i = 0; i < n; i++)                        //_________________________________
    {
        scanf("%d", &(*(p+i)));
    }
    for (i = 0; i < n; i++)
    {
        printf("%d ", *(p + i));
    }
    printf("\n");
    ///////////////////////////////////////
    for (i = 0; i < n - 1 ; i++)
    {
        for (p=p1; p < p + n - 1; p++)
        {
            if (*p > *(p + 1))
            {
                int t;
                t = *p; *p = *(p + 1); *(p + 1) = t;
            }
        }
        //p = p - (n - 1);
    }
    for (i = 0; i < n; i++)
    {
        printf("%d ", *(p + i));
    }
    free(p);
    p = NULL;
    return 0;
}

最后始终是 if语句报错,不知道问题出现在哪里

  • 写回答

7条回答 默认 最新

  • qzjhjxj 2023-06-05 20:52
    关注

    修改如下,改动处见注释,原代码没什么大问题, for (p=p1; p < p + n - 1; p++) 这句死循环了,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int n;
        scanf("%d", &n);
        int* p = (int*)malloc(n * sizeof(int));
    
        if (p == NULL)
        {
            printf("%s", strerror(errno));
        }
        int* p1 = p; //p1 指向数组首地址     修改
                     //p1
        int i;       //p
        for (i = 0; i < n; i++) //_________________________________
        {
            scanf("%d", &(*(p+i)));
        }
        for (i = 0; i < n; i++)
        {
            printf("%d ", *(p + i));
        }
        printf("\n");
        ///////////////////////////////////////
        for (i = 0; i < n - 1 ; i++)
        {                                    // 修改
            for (p=p1; p < p1 + n - 1; p++)  //for (p=p1; p < p + n - 1; p++)  p < p + n - 1 死循环了
            {                                //此时 p1 为数组的首地址 ,循环条件应改为:p < p1 + n - 1
                if (*p > *(p + 1))
                {
                    int t;
                    t = *p; *p = *(p + 1); *(p + 1) = t;
                }
            }
            //p = p - (n - 1);
        }
        for (i = 0; i < n; i++)
        {                              // 修改
            printf("%d ", *(p1 + i));  // printf("%d ", *(p + i));  p1 为数组首地址
        }
        free(p);
        p = NULL;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月5日

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡