第八章 字符输入/输出和输入验证——《C Primer Plus》笔记

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

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

8.2 缓冲区

无缓冲输入:输入字符后,程序马上能读取字符;

缓冲输入:输入的字符临时缓存,特定条件后(缓冲区满/输入 Enter)刷新,程序才能读取字符;

  1. 大多数系统都是此方式,一次发送多个比逐个发送节约时间;
  2. 方便修正要发送的数据;

完全缓冲:只有在缓冲区满时才刷新缓冲区;

行缓冲:按下 Enter后刷新缓冲。

8.3 结束键盘输入

C 函数读取到文件末尾时,会返回 EOF ,当输入是键盘时,可以模拟文件末尾(Windows:CTRL + Z;Linux:CTRL + D)。

8.4 重定向和文件

重定向:C 程序默认从 stdin 获取数据,不改变输入函数和数据类型,仅改变程序查找数据的位置。可以用 <> 重定向输入,输出

8.5 创建友好的用户界面

使用缓冲输入

输入缓冲要求用户按下 Enter 键,换行符同时也会被发送过来,需要谨慎处理这个麻烦的换行符。类似如下处理:

while(getchar() != 'y') /* 获取响应,与 y 做对比 */
{
  printf("Well,then, is it %d?\n", ++guess);
  while(getchar() != '\n')
    continue;    /* 跳过剩余的输入行 */
}

混合数值和字符输入

scanf 不会读取 Enter,空格,制表符,会留在输入队列。scanf 之后需要清理剩下的输入,类似处理如下:

if(scanf("%d %d", &rows, &cols) != 2)
  break;

display(ch, rows, cols);
while(getchar() != '\n')
  continue;

8.6 输入验证

用于用户输入数据和程序期望输入不匹配时,比如如下处理输入数据类型不匹配,当且仅当用户输入一个正整数时为真:

while(scanf("%ld", &n) == 1 && n >= 0)

8.7 菜单浏览

保证目标:

  1. 当用户遵循指令时程序顺利运行;
  2. 当用户没有遵循指令时,程序也能顺利运行。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容