第八章 字符输入输出和输入验证

目录

 

第八章 字符输入输出和输入验证

单字符I/O

缓冲区

结束键盘输入


第八章 字符输入输出和输入验证

单字符I/O

使用的是getchar()putchar()函数,它们都定义在stdio.h头文件中

设计一个程序从键盘获取输入字符并输出,直到遇到#字符停止:

#include<stdio.h>
#define STOP '#'

int main(void)
{
    char ch;
    while ((ch = getchar()) != STOP)
    {
        putchar(ch);
    }
    return 0;
}

交互式输入输出:

这是第一行输入
这是第一行输入
下面输入空格行
下面输入空格行
 
 
最后一行正常输入
最后一行正常输入
带井号的输入
带井号的输入
这是一行带#号的输入
这是一行带% 

缓冲区

1.无缓冲输入

在老式系统中运行上述代码,可能会出现如下情况:

HHeelllloo,,  tthheerree .. II  ww[enter]
lliikkee aa  #

像这种直接重复打印用户输入结果的属于“无缓冲”输入,即程序可立即使用输入的字符(有一个问题就是你甚至无法直接修改你的输入)。

2.缓冲输入

大部分系统在用户按下Enter键之前不会重复打印正在输入的字符,这种输入形式属于缓冲输入。用户输入的字符被收集并存储在一个被称为缓冲区(buffer)的临时存储区,按下Enter键后程序才可以使用用户输入的字符。

3.使用缓冲区的原因

  • 把若干字符作为一个块进行传输比逐个发送字符节约时间
  • 如果用户打错字符,可以通过键盘修正错误
  • 即使缓冲输入有诸多好处,但是无缓冲输入也有应用,比如在游戏等交互式程序中,我们希望按下一个键就执行对应的指令

4.缓冲的类别

  • 完全缓冲I/O:指缓冲区被填满才刷新缓冲区(内容被发送至目的地),==通常出现在文件输入中==。缓冲区的大小取决于系统,常见的是512字节和4096字节
  • 行缓冲I/O:出现换行符时刷新缓冲区,键盘输入通常是行缓冲输入,按下Enter键后才刷新缓冲区

结束键盘输入

1.文件,流和键盘输入

  • 文件:存储器中存储信息的区域,通常文件都保存在某种永久存储器中。对于文字处理器,不仅要打开、读取和关闭文件,还需要把数据写入文件
  • 流:C处理的是流而并非文件,流是一种实际输入或输出映射的理想化数据流。打开文件的过程就是把流和文件相关联,并且读写都通过流来完成

2.文件结尾

无论操作系统以何种方法检测文件结尾,在C语言中,getchar()scanf()方法读取文件检测到文件结尾时将返回一个特殊的值EOF(end of file)

通常EOF定义在stdio.h头文件中,常常被定义为-1,因为getchar()的返回值通常介于0~255-1不对应于任何字符。

在下面这个程序中,每次按下Enter键系统就会处理缓冲区中存储的字符,并在下一行打印输入行的副本,直到遇到EOF

#include<stdio.h>

int main(void)
{
    char ch;
    while ((ch = getchar()) != EOF)
    {
        putchar(ch);
    }
    return 0;
}

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值