一.
这道题目卡了我将近有一个星期,昨天实在忍不住才email求助刘大大.结果是数组越界. ORZ...
总体来说,这道题目不难,构造出来的模型无非就是个2维数组,然后将第一列当做第一行输出,第二列当做第二行输出,以此类推.
不过这里也有2个小细节处理: 1. 由于要控制输出的行数,因此要在输入时就判断出最长的一行的字符个数.
2. 每一行最后的换行符不能直接输出,而要换成空格.
稍微处理下这2个问题,AC这题比较简单.
之所以这题卡了我这么久,是我对边界的把握不够.
二.
简要分析下:
首先,由于题目中的条件给出:每一行不超过100个字符.于是我就把临时数组temp定义为100个.并且抱有侥幸心理:不会真的测试
输入100个字符.
但是,就是这点侥幸心理导致我一直没往这方面考虑.我们知道,当用fgets来读一行字符的时候,它会在行尾自动加上/n.因此,当输入100
个字符后,再加上/n就越界了.
三.
思想小结:
1. 对于边界情况一定要特别留心,不要偷懒不去分析边界或者模糊地猜测.
方法小结:
1. 对于临时数组的大小,要比题目条件给出的略大.
2. 在使用fgets的时候需要注意2点:
1)若前面有scanf进行输入,要排除scanf后的换行符对fgets的影响,一般是使用getchar()或者fgetc(stdin)过滤.
2)fgets会在输入的字符串后面自动加换行符.因此一定要注意此时字符串的长度问题.
(可以自己试验:用fgets接受键盘输入的abc,再用strlen去测,发现长度是4.原因是"abc/n")
四.
代码如下: