getchar()函数实际上是int getchar(void),所以它返回的是ASCII码,所以只要是ASCII码表里有的字符它都能读取出来。在调用getchar()函数时,编译器会依次读取用户键入缓存区的一个字符(注意这里只读取一个字符,如果缓存区有多个字符,那么将会读取上一次被读取字符的下一个字符),如果缓存区没有用户键入的字符,那么编译器会等待用户键入并回车后再执行下一步 (注意键入后的回车键也算一个字符,输出时直接换行)。
来几个例子:
运行实例:

第一个字符1被char ch读取,所以getchar()依次读取下一个未读取字符2
运行实例:

char ch读取第一个字符1,注意:我们说过,用户键入的回车也算一个字符,所以这里getchar()把回车读取了,输出时体现为换行
运行实例:

因为回车也算一个字符,所以如果在前面先要调用scanf()这种读取字符的函数后再键入新值调用getchar()(因为想要scanf()调用必须回车才能执行,就多了一个回车在缓存区中),建议清空缓存区再使用getchar(),不然getchar()会把前面回车也读取出来。注:可以使用fflush(stdin)清空缓存区(有的编译器用不了),推荐C语言基本语法:
例子:
运行实例:

如果没有清空缓存区呢?(结果可能有点不好理解,多分析一下)
运行实例:

getchar()在初次接触和使用时,大多数出错就是对于回车字符的读取。在调用时注意就会避免很多麻烦。调用前清空缓存区会是很好的解决办法。所以scanf()的优点就体现出来了,scanf()只有在格式化为"%c"时会读取回车符,但缺点也是无法读取含空格等字符的字符串并存储到字符数组中(严格意义上讲并不是字符串,可以理解为含格式化"%s"无法完整读取的字符组合,例如"gy gr 134 4353freg 32"这种中间有空格的)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10919.html