鱼C论坛

 找回密码
 立即注册
查看: 2189|回复: 2

[已解决]c作业S1E38——动态内存分配的一个问题

[复制链接]
发表于 2019-10-2 22:25:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目编写一个小程序,要求使用本节课学到的函数在堆中申请一个矩阵(二维数组),矩阵的尺寸由用户指定,并且允许修改。该小程序的更多功能及要求
我的代码
#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[g] = (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[g] = (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[m][n]= num;
                }
                
                if(i == 3)
                {
                        printf("请输入要修改的元素(行,列):");
                        scanf("%d, %d", &k, &j);
                        printf("请输入一个数字:");
                        scanf("%d", &l);
                        
                        pArr[k][j] = l;
                }
                
                if(i == 4)
                {
                        printf("请输入要读取的元素(行,列)");
                        scanf("%d, %d", &k, &j);
                        printf("第%d行第%d列的数是:%d", k, j, pArr[k][j]);
                }
                
                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;
}
        
2019-10-02 (6).png
一到2指令程序就结束了,究竟哪里错了啊?求大佬帮忙!
最佳答案
2019-10-2 22:45:35
楼主,你66行的scanf函数忘记加取址符号&了,正确写法应该是scanf("%d",&num);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-2 22:45:35 | 显示全部楼层    本楼为最佳答案   
楼主,你66行的scanf函数忘记加取址符号&了,正确写法应该是scanf("%d",&num);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


编程不需要视力
谢谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表