#include<stdio.h> #include<string.h> int main() { int i,j,k,l,m,n,o,p,q; char a[1100]; scanf("%d %d %d",&o,&p,&q); scanf("%s",a); l=strlen(a); for(i=0;i<l;i++) { if(a[i]!='-') { printf("%c",a[i]); } else { if(a[i+1]!='-'&&a[i+1]!='\0') { if(a[i-1]>=a[i+1]) { printf("%c",a[i]); } else { if((a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z')||(a[i+1]>='0'&&a[i+1]<='9'&&a[i-1]>='0'&&a[i-1]<='9')&&a[i+1]>a[i-1]) { m=a[i+1]-a[i-1]; if(q==1) { if(o==1) { for(j=0;j<m-1;j++) { for(k=0;k<p;k++) { printf("%c",a[i-1]+j+1); } } } else if(o==2) { for(j=0;j<m-1;j++) { if(a[i-1]>='0'&&a[i-1]<='9') { for(k=0;k<p;k++) { printf("%c",a[i-1]+j+1); } } else { for(k=0;k<p;k++) { printf("%c",a[i-1]+j-31); } } } } else { for(j=0;j<m-1;j++) { for(k=0;k<p;k++) { printf("%c",'*'); } } } } if(q==2) { if(o==1) { for(j=m-2;j>=0;j--) { for(k=0;k<p;k++) { printf("%c",a[i-1]+j+1); } } } else if(o==2) { for(j=m-2;j>=0;j--) { if(a[i-1]>='0'&&a[i-1]<='9') { for(k=0;k<p;k++) { printf("%c",a[i-1]+j+1); } } else { for(k=0;k<p;k++) { printf("%c",a[i-1]+j-31); } } } } else { for(j=0;j<m-1;j++) { for(k=0;k<p;k++) { printf("%c",'*'); } } } } } else printf("%c",a[i]); } } if(a[l-1]=='-') { printf("%c",a[l-1]); } } } }
如果输入二维字符数组,那么最好的输入方式是这样的:
至于你的scanf("%c",&a[i][j])出问题是因为,输入数据是有换行的,%c 会把换行读入进去,所以会读入有错误。