鱼C论坛

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

[已解决]s1e38动动手1问题

[复制链接]
发表于 2021-6-8 16:56:29 | 显示全部楼层 |阅读模式

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

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

x
请问大佬们,为什么会出现如下图的问题呀?
要么调用3.4能看到数据修改了却打印不出来
或者是位置错乱的多出修改?
代码如下:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. int M;
  5. int N;

  6. void welcome();
  7. char * ins1(char *);
  8. char * ins2(char *);
  9. char * ins3(char *);
  10. void ins4(char *);
  11. void ins5(char *);

  12. int main(void)
  13. {
  14.         int order;
  15.         char *ptr = NULL;

  16.         welcome();

  17.         do{
  18.                 printf("请输入指令:");
  19.                 scanf("%d",&order);
  20.                 getchar();

  21.                 switch(order)
  22.                 {
  23.                         case 1:ptr = ins1(ptr);break;
  24.                         case 2:ptr = ins2(ptr);break;
  25.                         case 3:ptr = ins3(ptr);break;
  26.                         case 4:ins4(ptr);break;
  27.                         case 5:ins5(ptr);break;
  28.                         case 6:break;
  29.                         default:printf("输入指令有误!请重新输入!\n");
  30.                 }
  31.                 putchar('\n');

  32.         }while(!(order == 6));

  33.         printf("感谢使用本程序^_^\n");

  34.         return 0;
  35. }

  36. void welcome()
  37. {
  38.         printf("============================\n");
  39.         printf("* 欢迎使用该程序,指令如下 *\n");
  40.         printf("* 1.生成一个 M*N 的矩阵    *\n");
  41.         printf("* 2.初始化矩阵             *\n");
  42.         printf("* 3.给矩阵中某个元素赋值   *\n");
  43.         printf("* 4.读取矩阵中的某个元素   *\n");
  44.         printf("* 5.打印整个矩阵           *\n");
  45.         printf("* 6.结束本程序             *\n");
  46.         printf("============================\n");
  47.         putchar('\n');
  48. }

  49. char *ins1(char *ptr)
  50. {
  51.         char ch;

  52.         if(ptr == NULL)
  53.         {
  54.                 printf("请输入新矩阵规模(M*N) -> ");
  55.                 scanf("%d*%d",&M,&N);
  56.                 getchar();

  57.                 ptr = (char *)malloc(M*N*sizeof(char));
  58.                 memset(ptr,'0',M*N*sizeof(char));

  59.                 if(ptr != NULL)
  60.                 {
  61.                         printf("%d * %d的矩阵创建成功!\n",M,N);
  62.                 }
  63.         }
  64.         else
  65.         {
  66.                 printf("矩阵已经存在,是否需要重新创建?(Y/N)-> ");
  67.                 scanf("%c",&ch);
  68.                 getchar();

  69.                 if(ch == 'Y')
  70.                 {
  71.                         free(ptr);
  72.                         printf("请输入新矩阵规模(M*N) -> ");
  73.                         scanf("%d*%d",&M,&N);
  74.                         getchar();

  75.                         ptr = (char *)malloc(M*N*sizeof(char));
  76.                         memset(ptr,'0',M*N*sizeof(char));

  77.                         if(ptr != NULL)
  78.                         {
  79.                                 printf("%d * %d的矩阵创建成功!\n",M,N);
  80.                         }
  81.                 }
  82.         }

  83.         return ptr;
  84. }

  85. char *ins2(char *ptr)
  86. {
  87.         char num;

  88.         printf("请输入一个数字:");
  89.         scanf("%c",&num);
  90.         getchar();

  91.         memset(ptr,num,M*N*sizeof(char));

  92.         return ptr;
  93. }

  94. char * ins3(char *ptr)
  95. {
  96.         int row,col;
  97.         char num;

  98.         printf("请输入要修改的位置(行,列)-> ");
  99.         scanf("%d,%d",&row,&col);
  100.         getchar();

  101.         printf("请输入一个数字:");
  102.         scanf("%c",&num);
  103.         getchar();

  104.         ptr[(row-1)*8+(col-1)] = num;

  105.         return ptr;
  106. }

  107. void ins4(char *ptr)
  108. {
  109.         int row,col;

  110.         printf("请输入要读取的位置(行,列)-> ");
  111.         scanf("%d,%d",&row,&col);
  112.         getchar();

  113.         printf("第%d行,第%d列的数字是:%c\n",row,col,ptr[(row-1)*8+(col-1)]);
  114. }

  115. void ins5(char *ptr)
  116. {
  117.         int i,j;

  118.         for(i = 0;i < M;i ++)
  119.         {
  120.                 for(j = 0;j < N;j ++)
  121.                 {
  122.                         printf("%c  ",ptr[i+j]);
  123.                 }
  124.                 putchar('\n');
  125.         }
  126. }
复制代码
最佳答案
2021-6-8 18:34:19
认真一点
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int M;
  5. int N;

  6. void welcome();
  7. char * ins1(char *);
  8. char * ins2(char *);
  9. char * ins3(char *);
  10. void ins4(char *);
  11. void ins5(char *);

  12. int main(void)
  13. {
  14.     int order;
  15.     char *ptr = NULL;

  16.     welcome();

  17.     do{
  18.         printf("请输入指令:");
  19.         scanf("%d",&order);
  20.         getchar();

  21.         switch(order)
  22.         {
  23.             case 1:ptr = ins1(ptr);break;
  24.             case 2:ptr = ins2(ptr);break;
  25.             case 3:ptr = ins3(ptr);break;
  26.             case 4:ins4(ptr);break;
  27.             case 5:ins5(ptr);break;
  28.             case 6:break;
  29.             default:printf("输入指令有误!请重新输入!\n");
  30.         }
  31.         putchar('\n');

  32.     }while(!(order == 6));

  33.     printf("感谢使用本程序^_^\n");
  34.     free(ptr);

  35.     return 0;
  36. }

  37. void welcome()
  38. {
  39.     printf("============================\n");
  40.     printf("* 欢迎使用该程序,指令如下 *\n");
  41.     printf("* 1.生成一个 M*N 的矩阵    *\n");
  42.     printf("* 2.初始化矩阵             *\n");
  43.     printf("* 3.给矩阵中某个元素赋值   *\n");
  44.     printf("* 4.读取矩阵中的某个元素   *\n");
  45.     printf("* 5.打印整个矩阵           *\n");
  46.     printf("* 6.结束本程序             *\n");
  47.     printf("============================\n");
  48.     putchar('\n');
  49. }

  50. char *ins1(char *ptr)
  51. {
  52.     char ch;

  53.     if(ptr == NULL)
  54.     {
  55.         printf("请输入新矩阵规模(M*N) -> ");
  56.         scanf("%d*%d",&M,&N);
  57.         getchar();

  58.         ptr = (char *)malloc(M*N*sizeof(char));
  59.         memset(ptr,'0',M*N*sizeof(char));

  60.         if(ptr != NULL)
  61.         {
  62.             printf("%d * %d的矩阵创建成功!\n",M,N);
  63.         }
  64.     }
  65.     else
  66.     {
  67.         printf("矩阵已经存在,是否需要重新创建?(Y/N)-> ");
  68.         scanf("%c",&ch);
  69.         getchar();

  70.         if(ch == 'Y')
  71.         {
  72.             free(ptr);
  73.             printf("请输入新矩阵规模(M*N) -> ");
  74.             scanf("%d*%d",&M,&N);
  75.             getchar();

  76.             ptr = (char *)malloc(M*N*sizeof(char));
  77.             memset(ptr,'0',M*N*sizeof(char));

  78.             if(ptr != NULL)
  79.             {
  80.                 printf("%d * %d的矩阵创建成功!\n",M,N);
  81.             }
  82.         }
  83.     }

  84.     return ptr;
  85. }

  86. char *ins2(char *ptr)
  87. {
  88.     char num;

  89.     printf("请输入一个数字:");
  90.     scanf("%c",&num);
  91.     getchar();

  92.     memset(ptr,num,M*N*sizeof(char));

  93.     return ptr;
  94. }

  95. char * ins3(char *ptr)
  96. {
  97.     int row,col;
  98.     char num;

  99.     printf("请输入要修改的位置(行,列)-> ");
  100.     scanf("%d,%d",&row,&col);
  101.     getchar();

  102.     printf("请输入一个数字:");
  103.     scanf("%c",&num);
  104.     getchar();

  105.     //ptr[(row-1)*8+(col-1)] = num;
  106.     ptr[(row - 1) * N + (col - 1)] = num;

  107.     return ptr;
  108. }

  109. void ins4(char *ptr)
  110. {
  111.     int row,col;

  112.     printf("请输入要读取的位置(行,列)-> ");
  113.     scanf("%d,%d",&row,&col);
  114.     getchar();

  115.     //printf("第%d行,第%d列的数字是:%c\n",row,col,ptr[(row-1)*8+(col-1)]);
  116.     printf("第%d行,第%d列的数字是:%c\n",row,col,ptr[(row - 1) * N + (col - 1)]);
  117. }

  118. void ins5(char *ptr)
  119. {
  120.     int i,j;

  121.     for(i = 0;i < M;i ++)
  122.     {
  123.         for(j = 0;j < N;j ++)
  124.         {
  125.             //printf("%c  ",ptr[i+j]);
  126.             printf("%c  ",ptr[i * N + j]);
  127.         }
  128.         putchar('\n');
  129.     }
  130. }
复制代码

修改后无打印

修改后无打印

多处被修改

多处被修改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-6-8 18:34:19 | 显示全部楼层    本楼为最佳答案   
认真一点
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int M;
  5. int N;

  6. void welcome();
  7. char * ins1(char *);
  8. char * ins2(char *);
  9. char * ins3(char *);
  10. void ins4(char *);
  11. void ins5(char *);

  12. int main(void)
  13. {
  14.     int order;
  15.     char *ptr = NULL;

  16.     welcome();

  17.     do{
  18.         printf("请输入指令:");
  19.         scanf("%d",&order);
  20.         getchar();

  21.         switch(order)
  22.         {
  23.             case 1:ptr = ins1(ptr);break;
  24.             case 2:ptr = ins2(ptr);break;
  25.             case 3:ptr = ins3(ptr);break;
  26.             case 4:ins4(ptr);break;
  27.             case 5:ins5(ptr);break;
  28.             case 6:break;
  29.             default:printf("输入指令有误!请重新输入!\n");
  30.         }
  31.         putchar('\n');

  32.     }while(!(order == 6));

  33.     printf("感谢使用本程序^_^\n");
  34.     free(ptr);

  35.     return 0;
  36. }

  37. void welcome()
  38. {
  39.     printf("============================\n");
  40.     printf("* 欢迎使用该程序,指令如下 *\n");
  41.     printf("* 1.生成一个 M*N 的矩阵    *\n");
  42.     printf("* 2.初始化矩阵             *\n");
  43.     printf("* 3.给矩阵中某个元素赋值   *\n");
  44.     printf("* 4.读取矩阵中的某个元素   *\n");
  45.     printf("* 5.打印整个矩阵           *\n");
  46.     printf("* 6.结束本程序             *\n");
  47.     printf("============================\n");
  48.     putchar('\n');
  49. }

  50. char *ins1(char *ptr)
  51. {
  52.     char ch;

  53.     if(ptr == NULL)
  54.     {
  55.         printf("请输入新矩阵规模(M*N) -> ");
  56.         scanf("%d*%d",&M,&N);
  57.         getchar();

  58.         ptr = (char *)malloc(M*N*sizeof(char));
  59.         memset(ptr,'0',M*N*sizeof(char));

  60.         if(ptr != NULL)
  61.         {
  62.             printf("%d * %d的矩阵创建成功!\n",M,N);
  63.         }
  64.     }
  65.     else
  66.     {
  67.         printf("矩阵已经存在,是否需要重新创建?(Y/N)-> ");
  68.         scanf("%c",&ch);
  69.         getchar();

  70.         if(ch == 'Y')
  71.         {
  72.             free(ptr);
  73.             printf("请输入新矩阵规模(M*N) -> ");
  74.             scanf("%d*%d",&M,&N);
  75.             getchar();

  76.             ptr = (char *)malloc(M*N*sizeof(char));
  77.             memset(ptr,'0',M*N*sizeof(char));

  78.             if(ptr != NULL)
  79.             {
  80.                 printf("%d * %d的矩阵创建成功!\n",M,N);
  81.             }
  82.         }
  83.     }

  84.     return ptr;
  85. }

  86. char *ins2(char *ptr)
  87. {
  88.     char num;

  89.     printf("请输入一个数字:");
  90.     scanf("%c",&num);
  91.     getchar();

  92.     memset(ptr,num,M*N*sizeof(char));

  93.     return ptr;
  94. }

  95. char * ins3(char *ptr)
  96. {
  97.     int row,col;
  98.     char num;

  99.     printf("请输入要修改的位置(行,列)-> ");
  100.     scanf("%d,%d",&row,&col);
  101.     getchar();

  102.     printf("请输入一个数字:");
  103.     scanf("%c",&num);
  104.     getchar();

  105.     //ptr[(row-1)*8+(col-1)] = num;
  106.     ptr[(row - 1) * N + (col - 1)] = num;

  107.     return ptr;
  108. }

  109. void ins4(char *ptr)
  110. {
  111.     int row,col;

  112.     printf("请输入要读取的位置(行,列)-> ");
  113.     scanf("%d,%d",&row,&col);
  114.     getchar();

  115.     //printf("第%d行,第%d列的数字是:%c\n",row,col,ptr[(row-1)*8+(col-1)]);
  116.     printf("第%d行,第%d列的数字是:%c\n",row,col,ptr[(row - 1) * N + (col - 1)]);
  117. }

  118. void ins5(char *ptr)
  119. {
  120.     int i,j;

  121.     for(i = 0;i < M;i ++)
  122.     {
  123.         for(j = 0;j < N;j ++)
  124.         {
  125.             //printf("%c  ",ptr[i+j]);
  126.             printf("%c  ",ptr[i * N + j]);
  127.         }
  128.         putchar('\n');
  129.     }
  130. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-8 19:54:27 | 显示全部楼层

谢谢大佬解答,我明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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