对于二维数组的输入,一般是一行一行的输入,当然也可以一个个来,但最好还是一行一行的输入。
所以一行一行的输入:
for(int i= 0;i < N;i++)
scanf("%s",perNum[i]);对于输入,单个输入用的是%c,而一行来输入就是%s。
而有一个情况,此时我们的输入每行都是要存18个数字,所以想法就是设二维数组的时候,列数就是18。
char perNum[100][18];
那这个时候输入输出代码:
char perNum[100][18];
int N;scanf("%d",&N); for(int i= 0;i < N;i++) scanf("%s",perNum[i]); for(int i= 0;i < N;i++) printf("%s\n",perNum[i]);代码的运行结果:
其中,第一行的2,是说明这个二维数组的行数。
这个时候发现,输入没问题,但输出的时候,按理来说,应该是2行18列。可是发现第一行的输出把第二行的输入也一起输出了。
这个问题在于,输出的时候,是根据\0,即换行符号判断是否要换行输出。但由于我们设定的列数才18,刚刚好只把输入给存完,这样子就没有地方存换行符(\0)。
所以这里的改进就是,把二维数组的列数至少多一位,用于存放换行符。
所以代码改为:
char perNum[100][19];//比18多一位,存放换行符
int N;scanf("%d",&N); for(int i= 0;i < N;i++) scanf("%s",perNum[i]); for(int i= 0;i < N;i++) printf("%s\n",perNum[i]);运行结果符合要求: