今天主要写下I/0函数。
第一块:输入
输入有2种,非缓冲输入和缓冲输入。
非缓冲输入指的是按下键盘的某个键,内容立刻出来了。举个栗子
while((ch=getchar())!='#'){ putchar(ch); }
若是非缓冲输入,则会出现aabbcc这样的情况,也就是按下什么,立刻输出了。这个在玩游戏的时候很有用。
缓冲输入指的是,按下某个键,内容被输入到缓冲区,当缓冲区读到换行字符的时候,就把缓冲区清空,去缓冲区域的内容送到程序中。
缓冲输入还分行缓冲和完全缓冲。
行缓冲指一行收到了换行符之后,也就是回车,清空缓冲区,把缓冲区内容给程序调用。
PS:按下回车有2个功能,一个是给缓冲区一个\n的换行符,相当于命令的执行把,一个是文本的换行。
完全缓冲指缓冲区满了之后去把内容给程序。
第二块:终止输入
C中用标准的I/O包处理文件,主要是为解决系统差异
比如 A系统用\n表示换行,B用\n\r表示换行。
这里就用if(ch=='\n')的时候,C的标准I/O函数就能很好地处理兼容性问题了。
C中有2个流,stdin and stdout
C的I/O函数都是和这2个东西打交道。
C用相同的技术处理文件和stdin。
读取文件,C有个标志来检测读完没。
读取stdin(如键盘输入),C的stdin函数也需要一个标志读完没。
一般有3中方法标志把。
a.用行开头的CTRL+Z(windows)标志
b.文件大小,超过了就代表结束了
c.C让getchar函数在读到文件结尾的时候返回一个特殊的值,EOF
所以一般在C中用c来获取文件结尾,文件结束和键盘输入的结束是类似的。