关于输入缓冲区
这里简单了解,不做过多描述。
当在键盘上输入字符/字符串后,输入的字符/字符串都会被缓冲区读取后放进缓冲区内储存,而之后我们调用scanf函数/getchar函数/gets函数操作时都需要在缓冲区内取出之前存入的字符/字符串。
如图例:
scanf函数:从键盘中读取数据,读取失败则返回EOF(-1)。
getchar函数:读取/获取一个字符,返回值为int类型,读取失败则返回EOF。
putchar函数:输出一个字符,读取失败则返回EOF。
gets函数:读取一个字符串,读取失败则返回NULL指针。
在这里可以看出来,
scanf函数读取不了空格后的数据,但是不仅可以读取字符/字符串还可以读取整数。
getchar函数一次只能读取一个字符,也可以把一个整数当作字符读取。
putchar函数类似于printf函数打印。
gets函数可以读取字符/字符串,还可以把整数以字符串的形式读取,另外空格后的数据也可以被gets函数读取。
此外,以上函数一般都是读取到 \n,就不再向后读取。
通过以下几段代码,可以更加充分的理解:
1.请问运行以下代码会发生什么?
#include<stdio.h>
int main()
{
int ch = 0;
while ( (ch = getchar() ) != EOF)
{
putchar(ch);
}
return 0;
}
这里的逻辑是,在while循环内,getchar函数读取变量ch,只要不读取失败,就会一直读取,然后putchar打印出来,读取失败则不进入while循环。ctrl+z+回车 结束程序。
效果图:
这段代码有什么作用? 其实它常常被我们用来清理缓存区。
比如接下来实现一段代码逻辑,
改进如下:
说明:为什么会有 \n,因为每次键盘输入后都需要敲一下回车键/enter键,而回车键就相当于在输入缓冲区内存入一个\n。
以上仅供参考