Chapter 8

单字符IO:getchar()、putchar(),一次从缓冲区返回一个字符。

输入输出流的概念:键盘或者文件输入都视为输入流,输出到文件或屏幕都视为输出流。因此键盘输入和屏幕输出一样可以视为一个文件操作。

文件结尾:在stdio的头文件中定义了一个文件结尾标志【EOF】实际上EOF是一个特殊的值,标志文件结尾。不同操作系统标记结尾的方式不同,可以是嵌入的ctrl+z(任意位置或某一行的开头,因不同操作系统而异)也可以是在一行开始处的ctrl+D(大多数UNIX和Linux系统中)。

 重定向io:原先的程序将键盘输入和屏幕输出作为输入和输出流,要使程序可以处理文件,可以重定向输入输出流到文件,这个时候程序将文件作为输入流,起到和读取键盘输入一样的效果。

在命令提示符环境下(UNIX或Linux为命令行模式)【<】符号是重定向输入运算符,【程序】<【文件】;【>】是重定向输出运算符,用法同理。重定向运算符可以组合使用,但只能连接一个可执行程序和一个输入、输出文件,重定向运算符作用于程序,与顺序无关。重定向运算符不能用于一次读取多个文件的输入,也不能一次输出至多个文件,另外输入和输出不能是同一个文件。重定向输出至文件时,输出结束应键入ctrl+d或ctrl+z以写入文件结尾标记,同时程序结束。

例:echo.exe<input.txt>output.txt 意为将echo.exe的输入重定向到input.txt,输出重定向到output.exe。                                                   但如果写成echo.exe>output.txt<input.txt 效果是一样的。

某些系统会要求运算符和文件名之间有强制空格。

基础输入验证

辨析键盘输入:现在的键盘输入一般都为缓冲输入,输入的字符存储在缓冲区,按下回车后统一输入,这也导致了除了我们输入的字符外,还会有一个\n被输入,这经常会导致程序出现输入错误,因此大多数时候应当丢弃包括换行符在内的多个空字符(在前面的简易交互程序中有使用一种清空输入缓冲的写法)。这就要谈到getchar()和scanf()的区别,前者是从输入流读取一个字符,无论是不是空字符,而scanf是格式输入,会跳过不符合格式的输入,但并未丢弃输入,输入仍保留在输入流中且是被优先读取的。

至于其他的输入验证,因要求不同而异,具体解决思路就是通过检查某个特定的参数来判断用户是否输入准确或输入是否完成,并丢弃其他的输入。可以通过scanf返回的输入成功个数,getchar返回的特定字符等等来检测

附加:文件基本操作

C语言file类,在stdio.h 头文件中,FILE类是一个结构体:定义如下:

struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };
typedef struct _iobuf FILE;

需要读取文件时首先需要定义一个FILE结构体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值