我认为getchar()
或fflush(stdin)
用于获取前一个输入留下的换行符或空格,因为gets()
函数无法区分该换行符和我们提供的输入。当我们在%s
函数上使用scanf
时,我们不需要这些。当我们在同一个函数上使用%c
或%d
时,为什么还需要它?
答案 0 :(得分:1)
事实是fflush()
没有为输入流定义行为,有一些特定的实现定义行为。此外, glibc 中有fpurge()
可以满足您的需求。
使用scanf()
时,规则是当它找到由isspace()
返回的空白字符时会停止,除非使用行为不同的%c
,因为它可以捕获空格,如果前面有空格,则忽略它们。
此外,gets()
功能很危险,最近已从c标准中移除,因此您不应使用它或将其作为示例参考。
fgets()
函数是gets()
的更好版本,如果可以的话,会捕获最终'\n'
,即如果到目前为止捕获的字符数不超过它是第二个参数,因此您不需要刷新之后的任何内容。
您应该考虑,scanf()
不仅会将最后一个'\n'
留在输入缓冲区中,而且还会在其后面留下任何空格。因此,单个getchar()
通常是不够的,您应getchar()
留下尽可能多的空白,以确保fflush(stdin)
的明显行为。