乐知者 发表于 2019-10-2 22:25:50

c作业S1E38——动态内存分配的一个问题

题目编写一个小程序,要求使用本节课学到的函数在堆中申请一个矩阵(二维数组),矩阵的尺寸由用户指定,并且允许修改。该小程序的更多功能及要求
我的代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int i, p = 0, q = 0;
        int m, n;
        int k, j;
        int l;
        int num;
       
        int **pArr;
        int g;
       
        printf("############################\n");
        printf("欢迎使用该程序,指令如下:\n");
        printf("1.生成一个M * N的数列\n");
        printf("2.初始化矩阵\n");
        printf("3.给矩阵中的某个元素赋值\n");
        printf("4.读取矩阵中某个元素\n");
        printf("5.打印整个矩阵\n");
        printf("6.结束程序\n");
        printf("############################");
       
        while(1)
        {
                       
                printf("\n请输入指令:");
                scanf("%d", &i);
       
                if(i == 1)
                {
                        if(p == 0 && q == 0)
                        {
                                printf("请输入新矩阵的规模(M * N)-->");
                                scanf("%d * %d", &p, &q);
                               
                                pArr = (int **)malloc(p * sizeof(int*));
                                for(g = 0; g < p; g++)
                                        pArr = (int *)malloc(p * sizeof(int));
                                       
                                printf("%d * %d矩阵以造好\n", p, q);
                        }
                       
                        else
                        {
                                printf("矩阵已经存在,是否要重新创建(Y/N)");
                                getchar();             //清楚缓冲区残留的换行符
                                if(getchar() == 'Y')
                                {
                                        printf("\n请输入新矩阵的规模(M * N)-->");
                                        scanf("%d * %d", &p, &q);
                                       
                                        pArr = (int **)malloc(p * sizeof(int*));
                                        for(g = 0; g < p; g++)
                                                pArr = (int *)malloc(p * sizeof(int));
                                       
                                        printf("%d * %d矩阵以造好\n", p, q);
                                }
                        }
                }
               
                if(i == 2)                                                                              //问题出在这里,输入指令2 后程序就终止了
                {
                        printf("请输入一个数字:");       
                        scanf("%d",num);
                       
                        for(m = 0; m < p; m++)
                                for(n = 0; n < q; n++)
                                        pArr= num;
                }
               
                if(i == 3)
                {
                        printf("请输入要修改的元素(行,列):");
                        scanf("%d, %d", &k, &j);
                        printf("请输入一个数字:");
                        scanf("%d", &l);
                       
                        pArr = l;
                }
               
                if(i == 4)
                {
                        printf("请输入要读取的元素(行,列)");
                        scanf("%d, %d", &k, &j);
                        printf("第%d行第%d列的数是:%d", k, j, pArr);
                }
               
                if(i == 5)
                {
                        for(m = 0; m < p; m++)
                                for(n = 0; n < q; n++)
                                        printf("%d", *(*(pArr + m) + n));
                        printf("\n");
                }
               
                if(i == 6)
                        break;
               
        }
       
        return 0;
}
       


一到2指令程序就结束了,究竟哪里错了啊?求大佬帮忙!{:10_250:}

echohah 发表于 2019-10-2 22:45:35

楼主,你66行的scanf函数忘记加取址符号&了,正确写法应该是scanf("%d",&num);

乐知者 发表于 2019-10-9 23:19:48

echohah 发表于 2019-10-2 22:45
楼主,你66行的scanf函数忘记加取址符号&了,正确写法应该是scanf("%d",&num);

{:5_107:}
编程不需要视力{:5_100:}
谢谢提醒
页: [1]
查看完整版本: c作业S1E38——动态内存分配的一个问题