鱼C论坛

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

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

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

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

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

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

  3. int main()
  4. {
  5.         int i, p = 0, q = 0;
  6.         int m, n;
  7.         int k, j;
  8.         int l;
  9.         int num;
  10.        
  11.         int **pArr;
  12.         int g;
  13.        
  14.         printf("############################\n");
  15.         printf("欢迎使用该程序,指令如下:\n");
  16.         printf("1.生成一个M * N的数列\n");
  17.         printf("2.初始化矩阵\n");
  18.         printf("3.给矩阵中的某个元素赋值\n");
  19.         printf("4.读取矩阵中某个元素\n");
  20.         printf("5.打印整个矩阵\n");
  21.         printf("6.结束程序\n");
  22.         printf("############################");
  23.        
  24.         while(1)
  25.         {
  26.                        
  27.                 printf("\n请输入指令:");
  28.                 scanf("%d", &i);
  29.        
  30.                 if(i == 1)
  31.                 {
  32.                         if(p == 0 && q == 0)
  33.                         {
  34.                                 printf("请输入新矩阵的规模(M * N)-->");
  35.                                 scanf("%d * %d", &p, &q);
  36.                                
  37.                                 pArr = (int **)malloc(p * sizeof(int*));
  38.                                 for(g = 0; g < p; g++)
  39.                                         pArr[g] = (int *)malloc(p * sizeof(int));
  40.                                        
  41.                                 printf("%d * %d矩阵以造好\n", p, q);
  42.                         }
  43.                        
  44.                         else
  45.                         {
  46.                                 printf("矩阵已经存在,是否要重新创建(Y/N)");
  47.                                 getchar();             //清楚缓冲区残留的换行符
  48.                                 if(getchar() == 'Y')
  49.                                 {
  50.                                         printf("\n请输入新矩阵的规模(M * N)-->");
  51.                                         scanf("%d * %d", &p, &q);
  52.                                        
  53.                                         pArr = (int **)malloc(p * sizeof(int*));
  54.                                         for(g = 0; g < p; g++)
  55.                                                 pArr[g] = (int *)malloc(p * sizeof(int));
  56.                                        
  57.                                         printf("%d * %d矩阵以造好\n", p, q);
  58.                                 }
  59.                         }
  60.                 }
  61.                
  62.                 if(i == 2)                                                                              //问题出在这里,输入指令2 后程序就终止了
  63.                 {
  64.                         printf("请输入一个数字:");       
  65.                         scanf("%d",num);
  66.                        
  67.                         for(m = 0; m < p; m++)
  68.                                 for(n = 0; n < q; n++)
  69.                                         pArr[m][n]= num;
  70.                 }
  71.                
  72.                 if(i == 3)
  73.                 {
  74.                         printf("请输入要修改的元素(行,列):");
  75.                         scanf("%d, %d", &k, &j);
  76.                         printf("请输入一个数字:");
  77.                         scanf("%d", &l);
  78.                        
  79.                         pArr[k][j] = l;
  80.                 }
  81.                
  82.                 if(i == 4)
  83.                 {
  84.                         printf("请输入要读取的元素(行,列)");
  85.                         scanf("%d, %d", &k, &j);
  86.                         printf("第%d行第%d列的数是:%d", k, j, pArr[k][j]);
  87.                 }
  88.                
  89.                 if(i == 5)
  90.                 {
  91.                         for(m = 0; m < p; m++)
  92.                                 for(n = 0; n < q; n++)
  93.                                         printf("%d  ", *(*(pArr + m) + n));
  94.                         printf("\n");
  95.                 }
  96.                
  97.                 if(i == 6)
  98.                         break;
  99.                
  100.         }
  101.        
  102.         return 0;
  103. }
  104.        
复制代码

2019-10-02 (6).png
一到2指令程序就结束了,究竟哪里错了啊?求大佬帮忙!
最佳答案
2019-10-2 22:45:35
楼主,你66行的scanf函数忘记加取址符号&了,正确写法应该是scanf("%d",&num);
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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


编程不需要视力
谢谢提醒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 16:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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