首先讲一下,缓冲区和非缓冲区,所谓的非缓冲区就是就是通过键盘输入,然后直接在屏幕中显示,比如是就是打游戏的时候,通过按键立即做出反应,如果你按一下按钮,然后半天没有反应,可想而知,这游戏怎么玩呀。缓冲区就是把你输入到缓冲区中东西,然后到达一定的长度然后一起发送给终端,这就是缓冲区,缓冲区还分为完全缓冲和行缓冲,完全缓冲就是当缓冲区满的话,然后在发送,行缓冲就是你按下enter,也就是所谓换行键,然后就发送。
文件结尾
操作系统一般是通过在文件结尾增加了一个ctrl+z来表示结尾,例如dos,也有一种方法就是通过文件大小来确定文件大小,例如unix,但是c中不管操作系统怎么定义文件结尾的,当getchar()读到末尾时会返回一个EOF标志,这个标志是-1,因为0-255都表示一个符号,例如要在dos中模拟结尾的时候用ctrl+z,来模拟EOF,在linux和unix中通过ctrl+d来模拟结尾
重定向
输入重定向:./funciton < word,word是一个文本文件,就是将这个文本文件作为输入源,然后把输入源中的数据给function这个c程序或者其他程序,
输出重定向:./function >word, 这个的意思就是将function运行产生的数据传送给这个word文本,
一般重定向符号的俩端都是一个文本一个应用程序,不可能俩个都是应用程序,俩个都是文本
******重要*******
就是getchar()输入的时候会把换行符,tab,空格都会读进来,但是scanf()不会读入换行符,tab,空格


你会发现我只输入一个字符,但是它输出俩行,也就是它把空格也算进去了,所以如果你只想打印一行,那么你可以在程序的循环里,在使用一个getchar()把空格给输出来,这样就会打印一行,但是你输入只能输入一个字符,否则也会不正常的
网友评论