C语言输入函数与缓冲区
调用以下输入函数,并从键盘输入内容并回车后,缓冲区的情况
函数 | 缓冲区是否留下’\n’ |
---|---|
scanf() | yes |
gets() | no |
getchar() | yes |
对于会在缓冲区留下换行符’\n’的方法,如果连续两次调用,输入完第一次以后,会自动跳过第二次输入,为什么呢?
因为实际上,C语言采用了缓冲区的机理,我们的输入的字符(包括回车)都会先存入输入缓冲区,scanf()、gets()、getchar()三个函数,实际上是读取缓冲区内容的命令,如果缓冲区中有内容,就直接读取缓冲区中的内容,只有当缓冲区中没有任何内容,才会要求键盘输入。
调用完这些函数之后是否会在缓冲区留下回车字符,是由他们读取缓冲区的方法所决定的。scanf函数根据输入格式的不同,读取的字节数会不同。当读取的是%s时,会一直读到空格或者换行符以前的字符,也就是说缓冲区会留下空格或者换行符及以后的内容。gets函数和scanf读取字符串的终止位置是一样的,只是它会自动清除紧接着的换行符。getchar函数是从缓冲区中读取一个字符,不会去掉后面的换行符。
那么对于要连续多次调用那些会在缓冲区中留下其他字符的函数,并且保证每次都提示输入,就要在第二次及以后调用之前先清空缓冲区,具体就是调用这句话:
while (getchar()!=‘\n');