|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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');
}
}
认真一点 #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');
}
}
|
-
修改后无打印
-
多处被修改
|