因为最近被getchar弄的很烦所以今天中午好好梳理一下
getchar()
从缓冲区读走一个字符,相当于清除缓冲区
前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个
getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误
下面用一个最简单的例子来解释
这里可以看到当连续输入两个字符时,如果加上回车换行,第二个人字符读入的就是\n回车符
加入getchar()把回车符给吸收时就可以正常读入输出
gets()
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符
不属于这个字符串。
gets()函数存在一个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装得下输入行。
对于get(s)来说,只有回车键才是结束的标识,空格不是输入结果标识,所以用gets这个函数就可以实现输入带空格的字符串
scanf()读入遇到空格就会结束
下面举一个小例子
可以看到第二次的读入后面的world并没有读入进去