字符矩阵的输入
问题
在输入字符矩阵时,换行符‘\n’会被当做字符存入字符矩阵中,准确的说,存入了每一行的最后一个。
解决方案
1.我们可以每一行多一个单位储存换行符,即在定义二维数组的大小时,列+1。
代码如下
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int m,n,i,j;
printf("输入矩阵的行:");
scanf("%d",&m);
printf("输入矩阵的列:");
scanf("%d",&n);
char a[m][n+1]; //每一列多一个单位,为'\n'预留空间
//输入字符矩阵
printf("请输入字符矩阵:\n");
for(i=0;i<m;i++){
for(j=0;j<n+1;j++){ //每行最后一位为换行符
scanf("%c",&a[i][j]);
}
}
//将字符矩阵输出
for(i=0;i<m;i++){
for(j=0;j<n+1;j++){
printf("%c",a[i][j]);
}
}
return 0;
}
输入输出示例
2.我们可以在碰到’\n’时往前退一下
代码如下
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int m,n,i,j;
printf("输入矩阵的行:");
scanf("%d",&m);
printf("输入矩阵的列:");
scanf("%d",&n);
char a[m][n];
//输入字符矩阵
printf("请输入字符矩阵:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{ //每行最后一位为换行符
scanf("%c",&a[i][j]);
if(a[i][j]=='\n') //往前退一下
{
j--;
}
}
}
//将字符矩阵输出
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
}
return 0;
}
输入输出示例
TO SUM UP
其实看似一个小小的问题,在不少方面发挥了重要作用,好好利用可以节约不少时间。