当前位置:嗨网首页>书籍在线阅读

11-程序讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.4.3 程序讨论

较之程序清单14.1,该程序主要的改动之处是:插入一个 while 循环读取多个项。该循环的条件测试是:

while (count < MAXBKS && s_gets(library[count].title, MAXTITL) != NULL
                      && library[count].title[0] != '\0')

表达式 s_gets(library[count].title, MAXTITL) 读取一个字符串作为书名,如果 s_gets() 尝试读到文件结尾后面,该表达式则返回 NULL 。表达式 library[count].title[0] != '\0' 判断字符串中的首字符是否是空字符(即,该字符串是否是空字符串)。如果在一行开始处用户按下 Enter 键,相当于输入了一个空字符串,循环将结束。程序中还检查了图书的数量,以免超出数组的大小。

然后,该程序中有如下几行:

while (getchar() != '\n')
     continue; /* 清理输入行 */

前面章节介绍过,这段代码弥补了 scanf() 函数遇到空格和换行符就结束读取的问题。当用户输入书的价格时,可能输入如下信息:

12.50[Enter]

其传送的字符序列如下:

12.50\n

scanf() 函数接受 12.50 ,但是把 \n 留在输入序列中。如果没有上面两行清理输入行的代码,就会把留在输入序列中的换行符当作空行读入,程序以为用户发送了停止输入的信号。我们插入的这两行代码只会在输入序列中查找并删除 \n ,不会处理其他字符。这样 s_gets() 就可以重新开始下一次输入。