8.字符输入、输出和输入验证

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;
}

image-20220609084938848

  • 但这样就存在一个问题,如果用一个字符结束输入,那么这个字符就无法输入。

8.2 缓冲区

大部分用户在按下回车之前不会重复打印刚刚输入的字符,这就是缓冲输入,刚输入的字符被收集并存储在缓存区,在按下回车后程序才使用用户输入的字符

  • 为什么要有缓存区?
    1. 节约发送字符的时间
    2. 如果打错字,可以直接修正。
  • 完全缓冲i/o和行缓冲i/o
    1. 完全缓冲i/o:当缓冲区被填满时才刷新缓冲区
    2. 行缓冲i/o:按下enter键后刷新缓冲区
    3. 在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;
}

image-20220609092848848

在大多UNIX和Linux系统中,在一行开头按下CTRL+d传输文件结尾信息,许多微型计算机系统在一行开头输入CTRL+Z结束运行

8.4 重定向和文件

重定向输入让程序使用文件而不是键盘输入

重定向输出让程序输出至文件而不是屏幕

  • 重定向输入:

image-20220609094721616

  • 重定向输出:

image-20220609095231623

​ 结尾以两个ctrl+z

  • 组合重定向:

    echo_eof>mywords.txt<words.txt
    echo_eof<words.txt>mywords.txt//顺序没有影响
    //文件名不能一样
    
    

txt<words.txt
echo_eof<words.txt>mywords.txt//顺序没有影响
//文件名不能一样



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值