影影影影影少丶 发表于 2021-6-8 16:56:29

s1e38动动手1问题

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

int M;
int N;

void welcome();
char * ins1(char *);
char * ins2(char *);
char * ins3(char *);
void ins4(char *);
void ins5(char *);

int main(void)
{
      int order;
      char *ptr = NULL;

      welcome();

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

                switch(order)
                {
                        case 1:ptr = ins1(ptr);break;
                        case 2:ptr = ins2(ptr);break;
                        case 3:ptr = ins3(ptr);break;
                        case 4:ins4(ptr);break;
                        case 5:ins5(ptr);break;
                        case 6:break;
                        default:printf("输入指令有误!请重新输入!\n");
                }
                putchar('\n');

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

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

      return 0;
}

void welcome()
{
      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("============================\n");
      putchar('\n');
}

char *ins1(char *ptr)
{
      char ch;

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

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

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

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

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

                        if(ptr != NULL)
                        {
                              printf("%d * %d的矩阵创建成功!\n",M,N);
                        }
                }
      }

      return ptr;
}

char *ins2(char *ptr)
{
      char num;

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

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

      return ptr;
}

char * ins3(char *ptr)
{
      int row,col;
      char num;

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

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

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

      return ptr;
}

void ins4(char *ptr)
{
      int row,col;

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

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

void ins5(char *ptr)
{
      int i,j;

      for(i = 0;i < M;i ++)
      {
                for(j = 0;j < N;j ++)
                {
                        printf("%c",ptr);
                }
                putchar('\n');
      }
}

人造人 发表于 2021-6-8 18:34:19

认真一点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int M;
int N;

void welcome();
char * ins1(char *);
char * ins2(char *);
char * ins3(char *);
void ins4(char *);
void ins5(char *);

int main(void)
{
    int order;
    char *ptr = NULL;

    welcome();

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

      switch(order)
      {
            case 1:ptr = ins1(ptr);break;
            case 2:ptr = ins2(ptr);break;
            case 3:ptr = ins3(ptr);break;
            case 4:ins4(ptr);break;
            case 5:ins5(ptr);break;
            case 6:break;
            default:printf("输入指令有误!请重新输入!\n");
      }
      putchar('\n');

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

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

    return 0;
}

void welcome()
{
    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("============================\n");
    putchar('\n');
}

char *ins1(char *ptr)
{
    char ch;

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

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

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

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

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

            if(ptr != NULL)
            {
                printf("%d * %d的矩阵创建成功!\n",M,N);
            }
      }
    }

    return ptr;
}

char *ins2(char *ptr)
{
    char num;

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

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

    return ptr;
}

char * ins3(char *ptr)
{
    int row,col;
    char num;

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

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

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

    return ptr;
}

void ins4(char *ptr)
{
    int row,col;

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

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

void ins5(char *ptr)
{
    int i,j;

    for(i = 0;i < M;i ++)
    {
      for(j = 0;j < N;j ++)
      {
            //printf("%c",ptr);
            printf("%c",ptr);
      }
      putchar('\n');
    }
}

影影影影影少丶 发表于 2021-6-8 19:54:27

人造人 发表于 2021-6-8 18:34
认真一点

谢谢大佬解答,我明白了{:5_95:}
页: [1]
查看完整版本: s1e38动动手1问题