第八节 字符输入/输出和输入验证

8.1 单字符I/O:getchar()和putchar()


  • getchar()和putchar()包含在stdio.h头文件中

8.2 缓冲区


  • 无缓冲输入: 直接回复用户
  • 缓冲输入: 暂缓回复
  • 缓冲区:收集用户输入字符的临时存储区
    • 节省时间
    • 可以修正输入
  • 完全缓冲I/o:当缓冲区被填满时才刷新缓冲区
  • 行缓冲I/O:出现换行符时刷新缓冲区

8.3 结束键盘输入


8.3.1 文件、流和键盘输入
8.3.2 文件结尾
  • 文件结尾的一种方法:在文件的末尾放置一个特殊的字符文件标记(ctrl+z)
  • 另一种方法:储存文件大小的信息
  • getchar()和scanf()读取到文件末尾返回EOF
    • EOF在stdio.h中被预处理定义
    • UNIX中Ctrl+D PC中Ctrl+Z

8.4 重定向和文件


8.4.1 UNIX、Linux和DOS的重定向
  • 重定向输入让程序使用文件而不是程序输入
  • 重定向输出让程序输出到文件而不是屏幕
    • 重定向输入 >
    • 重定向输出 <
    • 组合重定向 >输出文件 <输入文件
  • 关于重定向的要求:
    • 程序与文件放在同同一路径下
    • cmd窗口使用时用cd指令来改变路径
    • 一对一原则
    • << 可以将字符加在文件之后而不覆盖

8.5 创建更友好的用户界面


8.5.1 使用缓冲输入
  • 考虑用户各种输入情况
  • 处理好输入结尾\n
8.5.2 混合数值和字符输入
  • getchar()读取每个字符,包括空格、制表符和换行符,而scanf()则会跳过这些
  • scanf()输入会返回数值,数值代表成功读取个数

8.6 输入验证


8.6.1 分析程序
  • 程序遵循模块化的编程思想,使用独立函数(模块)来验证输入和管理显示。
8.6.2 输入流和数字
  • gatchar()和%c的scanf()可以接受所有的字符

8.7 菜单浏览


  • switch语句
  • 解决缓冲输入带来的麻烦,跳过多余输入和换行符
    while(getchar()!='\n')
continue;

《C Prime Plus》第八节笔记的更多相关文章

  1. Chapter6(函数) --C++Prime笔记

    1.重载函数,也就是说一个名字可以对应几个不同的函数. 2.内置类型的未初始化局部变量将产生未定义的值. 3.局部静态对象在程序执行路径第一次进过对象定义语句时初始化,并且直到程序终止才被销毁. 内置 ...

  2. Chapter2(变量和基础类型)--C++Prime笔记

    数据类型选择的准则: ①当明确知晓数值不可能为负时,选用无符号类型. ②使用int执行整数运算.在实际应用中,short常常显得太小而long一般和int有一样的尺寸.如果运算范围超过int的表示范围 ...

  3. Chapter1(预科)--C++Prime笔记

    心得体会: 因为之前一直在用在学C,因此在看完C++Prime第一章后,就有中在一个培训班中,一个老师用一个简单的项目来带你了解这种语言的特性的感觉.当然这个告诉是在让你脑子固化接受一些点的前提下. ...

  4. HTML学习笔记 CSS表格及轮廓案例 第八节 (原创)参考使用表

    #tb, tb1, tr, th, td { border: 5px solid blue; /*加边框*/ padding: 5px; /*内边距*/ } #tb1 { border-collaps ...

  5. [extjs5学习笔记]第三十八节 sencha CMD 6.0.0.220版本安装

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/46740381 简介 sencha cmd 6安装过程不需要UAC控制了对于widnow ...

  6. [ExtJS5学习笔记]第二十八节 sencha ext js 5.1.0发布版本正式发布 extjs doc下载地址

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/41911539 本文作者:sushengmiyan ------------------ ...

  7. [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39156321 官方例子:http://docs.sencha.com/extjs/5. ...

  8. [ExtJS5学习笔记]第八节 Extjs5的Ext.toolbar.Toolbar工具条组件及其应用

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38515499 本文作者:sushengmiyan ------------------ ...

  9. Linux第八节课学习笔记

    su命令可以切换用户身份,一般不用,而是用sudo. visudo命令中可执行命令列表不用ALL,我们可以先使用whereis命令找出命令所对应的保存路径,然后把配置文件第99行的用户权限参数修改成对 ...

随机推荐

  1. JNI传递修改自定义Java Class数组数据

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 结合前面讲的2篇关于JNI的文章,这里直接把代码贴上,主要是要知道如果传递自定义Class Array的时 ...

  2. windows下MariaDB忘记密码找回

    1.首先停止数据库 2.找到my.ini文件 3.右键以记事本打开在Mysqld下添加如下一行保存,然后启动数据库 4.登录数据库会提示输入密码,默认回车即可 5.退出数据库,删除我们上面在my.in ...

  3. 吴裕雄--天生自然 JAVASCRIPT开发学习: 错误 - throw、try 和 catch

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Mybatix实现in查询(五)

    在这一节,我们要向大家介绍一下在Mybatis中想要实现in查询,Mapper文件应该怎么配置. 1)在com.mybatis.dao.PartDao中增加接口函数 public List<Pa ...

  5. CodeForces-1100C NN and the Optical Illusion 简单数学

    题目链接:https://vjudge.net/problem/CodeForces-1100C 题意: 题目给出外部圆的数目n和内部圆的半径r,要求求出外部圆的半径以满足图片要求. 显然这是一道数学 ...

  6. dockerfile保留字指令

    FROM 基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时运行的命令 EXPOSE 当前容器对外暴露的端口 WORKDIR 指定在创建容器后, ...

  7. Java Keyword Synchronized 学习记录

    Synchronized Java编程思想:每个对象都包含了一把锁(也叫作"监视器"),它自动成为对象的一部分,调用任何synchronized方法时,对象就会被锁定,不可再调用那 ...

  8. JavaScript 闭包究竟是什么JavaScript 闭包究竟是什么

    用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑.陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQue ...

  9. MyBatis从入门到精通(第9章):Spring集成MyBatis(上)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(上) Spring是一个为了解决企业级Web应用开发过程中面临的复杂性,而被创建的一个非常流行的轻量级框架. mybatis-sp ...

  10. 基于JSP+Servlet开发在线租车系统 java 源码

    运行环境: 最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以.IDE环境: Eclipse,Myeclipse,IDEA都可以tomcat环境: Tomcat 7.x,8. ...