又遇到问题啦

7-5 古风排版

题目链接:https://pintia.cn/problem-sets/1021197786124881920/problems/1021199918152519680

#include<stdio.h>
#include<string.h>
//#include<string>
//using namespace std;
int main(){
	char a[1010];
	int n;
	scanf("%d",&n);
	getchar();
	gets(a);
	int len;
	len=strlen(a);
	//printf("%d\n",strlen(a));
	int m;
	if(strlen(a)%n!=0){
	    m=strlen(a)/n+1;	
	}else{
		m=strlen(a)/n;
	}
	//printf("%d\n",m);
	char b[n][m];
	memset(b,' ',sizeof(b));
	int p=0; 
    for(int j=(m-1);j>=0;j--){
		for(int i=0;i<n;i++){
			//int p=n*(m-j-1)+i;
			b[i][j]=a[p++];
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			printf("%c",b[i][j]);
		}
		//if(i!=n-1)
		printf("\n");
	}
	return 0;
}

问题已解决,问题在于对字符串b进行赋值时超过了字符串a的范围

这样就会造成出现乱码的情况

解决办法有两个

1.对字符数组b进行赋值时,需要限制a的范围,在达到边界时就停止赋值

2.在字符串a后加大量的空格

还有一点要说的是,使用gets()函数前需要输入数值时,需要在gets()函数前加上getchar();

猜你喜欢

转载自blog.csdn.net/Helloirbd/article/details/81168708