如题。
发现 c 里面即使是很简单的问题处理起来都是比较麻烦的。比如标题里面的这个小问题。
这个问题首先要分析。
- 既然是任意长度,定义固定长度的数组去接收输入就不合适了。malloc 也不行,还是因为不知道大小,不知道 malloc 多大的内存。
- 既然这样,我想到使用
putchar()/ getchar()这组函数去实现。
如果使用这组函数去实现的话,需要注意一个问题,就是所谓的缓冲区问题。什么是缓冲区问题?就是我调用 getchar() 之后,就可以在控制台输入了,但是无论我是输入一个字符还是一行字符,这个函数并没有完成调用。直到按下回车键,它才会去获取我输入的第一个字符。
既然如此,在设计行号打印的时候就要特别注意打印行号的时机。
要想到,在输入一行数据直到回车,才会传给 getchar(), 然后这时就开始执行 while 逻辑,不停的get 然后 put. 第二行的输入也是如此。行号一般肯定是在前面打印的,那么,通过两个变量去控制行号的打印时机,就是 curr,last 。每次换行就给 curr+1。last 什么时候+1?肯定要在打印过行号之后了。打印行号的时机就是 curr != last 的时候。
… 表达的可能不是很好,不过代码还算比较清晰。
思考的过程有点费脑,但是代码很简单,直接给出实现。
#include <stdio.h>
#include

博客讨论了C语言处理任意长度输入的问题,指出定义固定长度数组和使用malloc都不合适,可使用特定函数实现,但要注意缓冲区问题。还阐述了行号打印时机,通过curr和last两个变量控制,最后表示代码简单并给出实现。
最低0.47元/天 解锁文章
680

被折叠的 条评论
为什么被折叠?



