看一个具体例子:
https://bbs.bccn.net/thread-446250-1-1.html
这个帖子的问题,就是平时不测试、不深究的典型。scanf()中的%s指示符,读取一段字符串,但它是只能读取一个“单词”的,所谓单词是指用空格、制表、回车换行之类空白符分隔起来的连续串。这个特性,书上有讲,库函数使用手册有讲,不看书或看书不看文字的,起码也要在编程时有测试函数用什么输入獲得什么輸出的经验才付诸使用。凡是问这类问题的,一定是没认真做功课之人。不懂没问题,但没意识就难救了。
你看他代码的定义,两个字符串的長度都那么长,很明显是考虑到文本带空格的,但实现的代码,却居然是用scanf()的%s,还要问什么错位,那么我上面的定性就是没错的。的确很多人到了期末做课题的时候,都仍然不知道这个问题的,像“姓名”之类字段,他就是用scanf()的"%s"去读,楞是没觉察像英文地区那样的人名带空格会如何。还有那种给出一段代码,问为什么輸出不对的,也基本上是这类,他完全没有意识應該把输入告诉人,就问輸出为什么是这样,须知“輸出由输入决定”、“垃圾输入只能得到垃圾輸出”,这是最基本的道理,凡是这样问问题的,第一我不会去答,第二抢答的人自己大半也是跟问问题的是同类。