做题的时候有时会用到getchar()接收换行符,然而让人困惑的是一般使用scanf("%s", str)这样的形式读取字符串的时候似乎并没有考虑这个问题。网上通常会给你讲大道理缓冲区啥的,然后听懂后自己得不得的出结论全看天赋(摊手),所以在这里直接下结论了:
1.一个scanf后的确有回车在缓冲区里,但是scanf("%s", str)这样的不会把之前留下的换行符读取掉(就是无视了)。这就是平时用%s解决“一个数字,后面跟N个字符串”这样的输入没有问题的原因。
2.相对的,如果用%c,那就要考虑接收换行符的事情了,在这里插入图片描述

例如这样的话,在缓冲区的空格就会被读取,所以两个scanf中间需要getchar()。(再次吐槽某些实验,贴出代码一长串还要自己先找关键代码段)
3.gets()也是会读取之前留下来的换行符的,所以也需要一个getchar()。类似实验可以参照2的截图,设置断点或者用printf查看输出结果都行。
本文主要探讨C语言中输入函数对换行符的处理。指出scanf(\%s\ str)不会读取之前留下的换行符,而用%c时要考虑接收换行符,需用getchar();gets()也会读取之前的换行符,同样需要getchar()。
9504

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



