字符输入输出

printf() scanf() putchar() getchar()都是C中的标准的I/O函数,因为这样的标准的函数必须在很多种类的计算机环境中工作,所以这些函数很少利用某个特定系统的特殊性能。

单字符I/O:putchar() getchar()(其中putchar()是输出,getchar()是输入)

    一次只能输入或者输出一个字符,但是能够容易的读取多与单个字符的一组数据(使用循环),是大多数处理文本的程序核心。

缓冲区:

        输入字符的立即回显是非缓冲(unbuffered)或直接(direct)输入的一个实例,键入的字符立即变为可用

        延迟回显是缓冲(buffered)输入的实例,所键入的字符被存储在被称为缓冲区的临时存储区域,按回车键可使键入的区域变为可用

缓冲的优势:

        首先是将若干个字符一起发送比单独发一个字符要节约时间,其次当输入有误的时候,可以使用键盘进行更正,这样按回车后就能输入正确的内容了

非缓冲的优势:

        对于一些交互性的程序需要非缓冲的输入,例如,在游戏中,希望按一下键就可以执行某一条命令,因此缓冲和非缓冲具有它们各自的用途

缓冲分为两类:

        1.完全缓冲(fully buffered)I/O,缓冲区满时被清空(内容被发到目的地),通常出现在文件输入中,缓冲区的大小取决于系统,一般为512Bytes 或者 4096Bytes

        2.行缓冲(line-buffered)I/O,遇到一个换行字符就被清空缓冲区,键盘输入是标准的行缓冲,按下回车键将清空缓冲区。

C程序处理一个流而不是直接处理文件,流(stream)是一个理想化的数据流,实际数入或者输出映射到这个数据流,这意味着具有不同属性的多种类型的输入由流表示,会具有更多统一的属性。于是打开文件的过程就成为将流与文件相关联,并通过流进行读写的过程。

        键盘的输入由stdin流表示,到屏幕的输出由stdout流表示,getchar() putchar() printf() sanf()函数都是标准的I/O包的成员,这些函数通这两个流打交道。

判断文件输入结束:

        1.利用特殊的结束字符来判断文件输入结束,比如ctrl+Z,但是这种情况下文件中就不能再嵌入这样的字符了

        2.让操作系统存取文件的大小的信息,当程序读取了相应的大小的数据的时候就停止读入,这种情况下文件可以内嵌所有的字符

        3.C语言中的文件结束符EOF,当getchar()检测到字符的值等于EOF(-1)的时候,就停止接收字符

重定向和文件:

        默认的情况下标准I/O包的C程序标准输入作为其输入源,标准输入就是stdin,但是我们希望您能告诉一个程序从文件而不是键盘寻求其输入

        令程序和数据一起工作有两种方式:

                1.明确的使用打开文件、关闭文件、读文件、写文件等专门的函数

                2.使用一个设计用于与键盘和屏幕共同工作的程序,但是使用不同通道重定向(redirect)输入和输出,这一种方法比第一种方法在一些方面功能更有限,但它更容易使用,而且是您能够更加熟悉常用的文件处理技术

        重定向技术的一个主要的问题是其与操作系统而不是C相关联

        UNIX、Linux和DOS的重定向:

                1.输入重定向:运行一个程序,如果直接运行则要用键盘进行输入,但是当有输入文本文件的时候(文本文件中是人可读的信息),可以运行以下的命令

                                                                           <文件名> < <文本文件名>

                其中 <  符号是UNIX、Linux(和DOS)的重定向运算符

                2.输出重定向:<程序名> > <输出文件名>,其中>是另一个重定向符,将程序的输出保存在输出文件名中,如果系统中已经包含于输出文件名相同的文件,则将文件删除,重新生成,但时若将文件权限改为只读,那么就不会将文件删除

                3.组合重定向: <程序名> < <输入文件名> > <输出文件名> 但时注意不要使输入输出使用相同的文件名

        重定向运算符的遵循规则:

                1.重定向运算符将一个可执行的程序(包括标准的操作系统命令)与一个数据文件链接起来,该运算符不能用于两个数据文件的连接,也不能用于两个程序的连接

                2.使用这些运算符时,输入不能来自一个以上的文件,输出也不能定向到一个以上的文件

                3.除了偶尔在使用到一些对Unix shell、Linux shell 或DOS具有特殊意义的字符时,名字和操作符之间的空格并不是必须的

输入确认:

        scanf()返回其成功输入的项目的个数

       

       


                

       






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值