把a在第10行的for循环前初始化为0试试,因为每行字符数的长度都可能不同;
然后第6行scanf()语句后面放个getchar(),读走缓冲区的换行符,以免下面for循环读取字符时,第一行为空。
修改如下:
#include <stdio.h>
int main(void){
int N;
char n[100][81];
scanf("%d",&N);
getchar();// 清除缓冲区的换行符,以免下面读取时第一行为空
int a=0;
for(int i=0;i<N;i++){
a=0; // a为每行字符的长度,所以在计算前都需要初始化为0
for(int j=0;j<80;j++){
scanf("%c",&n[i][j+1]);
a++;
if(n[i][j+1]=='\n'){
a-=1;
n[i][0]=a;
n[i][j+1]='\0';
break;
}
}
}
/*
5
123s
zheshi.wodepw
1234.5678
WanMei23333
*/
for(int i=0;i<N;i++){
for(int j=0;j<n[i][0];j++){
// 可以在这里打印下行列长度,及其值,和前面循环计算出的长度观察下程序的执行
//printf("a=%d,i=%d,j+1=%d,%c\n",n[i][0],i,j+1,n[i][j+1]);
printf("%c",n[i][j+1]);
}
printf("\0");// 这里不需要这个打印
// printf("|") ;
printf("\n");
}
return 0;
}
【相关推荐】