鱼C论坛

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

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

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

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

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

x
请问大佬们,为什么会出现如下图的问题呀?
要么调用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[i+j]);
                }
                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[i+j]);
            printf("%c  ",ptr[i * N + j]);
        }
        putchar('\n');
    }
}

修改后无打印

修改后无打印

多处被修改

多处被修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i+j]);
            printf("%c  ",ptr[i * N + j]);
        }
        putchar('\n');
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢大佬解答,我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 12:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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