8.1 单字符I/O:getchar()和putchar()
getchar()和putchar()每次只处理一个字符
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch;
while((ch = getchar()) != '#') //当输入不为#,就一直运行
putchar(ch); //
system("pause");
return 0;
}
- 但这样就存在一个问题,如果用一个字符结束输入,那么这个字符就无法输入。
8.2 缓冲区
大部分用户在按下回车之前不会重复打印刚刚输入的字符,这就是缓冲输入,刚输入的字符被收集并存储在缓存区,在按下回车后程序才使用用户输入的字符
- 为什么要有缓存区?
- 节约发送字符的时间
- 如果打错字,可以直接修正。
- 完全缓冲i/o和行缓冲i/o
- 完全缓冲i/o:当缓冲区被填满时才刷新缓冲区
- 行缓冲i/o:按下enter键后刷新缓冲区
- 在unix系统中,使用ioctl()函数指定输入的类型;在ANSI C中,用setbuf()和setvbuf()函数控制缓冲。
8.3 结束键盘输入
8.3.2 文件结尾
- 在文件尾放一个特殊字符标记,CTRL+Z
- 存储文件大小信息
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch;
while((ch = getchar()) != EOF) //当没有检测到文件结尾时,就一直运行,在一行开头输入CTRL+Z结束运行
putchar(ch); //
system("pause");
return 0;
}
在大多UNIX和Linux系统中,在一行开头按下CTRL+d传输文件结尾信息,许多微型计算机系统在一行开头输入CTRL+Z结束运行
8.4 重定向和文件
重定向输入让程序使用文件而不是键盘输入
重定向输出让程序输出至文件而不是屏幕
- 重定向输入:
- 重定向输出:
结尾以两个ctrl+z
-
组合重定向:
echo_eof>mywords.txt<words.txt echo_eof<words.txt>mywords.txt//顺序没有影响 //文件名不能一样
txt<words.txt
echo_eof<words.txt>mywords.txt//顺序没有影响
//文件名不能一样