关于二维(字符)数组的输入问题

在解决PAT的团体程序设计天梯赛-练习集的L1_016:点击打开链接

遇到需要定义一个二维的字符数组,用于存储身份证号信息。此时对于二维数组的输入有一些细节问题,很重要。

对于二维数组的输入,一般是一行一行的输入,当然也可以一个个来,但最好的还是一行一行的输入。

所以一行一行的输入:

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]);
运行结果:


符合我们的要求。

总结:

以后的二维数组,列数多一位,用于存放换行符(\0)。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值