C Primer Plus 学习笔记 第8章 字符输入/输出和输入验证

继续写博客,趁着这几天印象还不错抓紧结束。

全书共分17章,这是关于本书第8章内容的博客,本章介绍了关于输入和输出的一些知识,以及重定向的内容,还给出了关于创建界面的建议。博客的目录和书上目录是相似的。此系列博客的代码都在Visual Studio 2022环境下编译运行。

我目前大一刚刚结束,水平有限,博客中若有错误或者总结不到位的地方也请见谅。

目录

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

8.2 缓冲区

8.3 结束键盘输入

8.3.1 文件、流和键盘输入

8.3.2 文件结尾

8.4 重定向和文件

8.5 创建更友好的用户界面

8.5.1 使用缓冲输入

8.5.2 混合数值和字符输入

8.6 输入验证

8.7 菜单浏览


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

虽然getchar()和putchar()一次只能处理一个字符,但是这种方法适合计算机,并且是绝大多数文本处理程序的核心方法。

8.2 缓冲区

不进行缓冲存储的输入是无缓冲输入,正在等待的程序可以立即使用输入的字符。进行缓冲的输入是缓冲输入,用户的输入被收集并存储在缓冲区中。

使用缓冲区比逐个发送字符更节省时间,并且可以修正输入错误。但是某些情况也需要无缓冲输入。

缓冲分为两类:完全缓冲行缓冲。完全缓冲在缓冲区被填满时才刷新缓冲区,通常出现在文件输入中。缓冲区的大小取决于系统。行缓冲在出现换行符时刷新缓冲区,键盘输入通常是行缓冲。

ANSI C和后续的C标准规定输入是缓冲的,且没有提供调用无缓冲输入的标准方式,是否能进行无缓冲输入取决于计算机系统。

8.3 结束键盘输入

8.3.1 文件、流和键盘输入

文件是存储信息的区域。

C语言有很多用于打开、读取、写入和关闭文件的库函数。C语言可以使用主机操作系统的基本文件工具直接处理文件,这些直接调用操作系统的函数被称为底层I/O。C语言不为普通的底层I/O函数创建标准库,因为系统各不相同。C语言可以通过标准I/O包处理文件,这时由具体的C实现处理不同系统的差异,使用标准I/O包就不用考虑差异。

C语言处理的是,而不是直接处理文件。流是实际输入或输出映射的理想化数据流。打开文件是把流与文件关联,读写是通过流来完成。

C语言把输入和输出设备视为存储设备上的普通文件,把键盘和显示设备视为自动打开的文件。stdin表示键盘输入,stdout表示屏幕输出。getchar(),putchar(),printf()和scanf()都是标准I/O包的成员,处理这两个流。

可以用处理文件的方式处理键盘输入。C语言的输入函数内置了文件结尾检测器。

8.3.2 文件结尾

操作系统使用某种方式判断文件的开始和结束。

C语言中,用getchar()和scanf()检测到文件末尾会返回EOF(end of file)。EOF定义在stdio.h头文件中。一般EOF是负值(本系统是-1),不对应任何字符。EOF标志着检测到文件结尾,不是文件中的符号。

可以使用EOF判断输入是否达到结尾。示例如下:

#include<stdio.h>
int main(void)
{
	int ch;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	return 0;
}

需要输入EOF字符,Windows是在换行后立即按Crtl+Z。不同系统的输入方式不同。

8.4 重定向和文件

输入和输出涉及函数、数据和设备。默认情况下C语言使用标准I/O包查找标准输入作为输入源,也可以从别处查找。

程序可以通过特定的函数使用文件(第13章内容),也可以通过重定向输入至文件和从文件输出。

重定向与操作系统有关。Windows命令行可以重定向输入输出。重定向输入让程序用文件输入,重定向输出让程序输出至文件。

文本文件是内含文本的文件,其中存储的是字符。存储可执行程序的文件不是文本文件。

把输入重定向的指令是:

./prog(可执行文件)<file(文本文件)

把输出重定向的指令是:

./prog(可执行文件)>file(文本文件)

组合重定向的指令是:

./prog < file2 > file1

./prog > file1 < file2

把file2作为输入,把file1作为输出。file1和file2不能是同一个文件。

不能读取多个文件的输入,也不能把输出定向至多个文件。不能连接两个可执行程序,也不能连接两个文本文件。

重定向要在命令行发出指令,一些IDE提供菜单选项,可以指定重定向。

也可以用程序直接打开文件,不使用重定向。详细内容在第13章。

8.5 创建更友好的用户界面

8.5.1 使用缓冲输入

使用缓冲输入比较方便,用户在结束输入前可以修改输入,但是会给程序员带来麻烦。

按下Enter键传送了换行符,程序必须处理换行符,否则会造成输入错误。

在编写交互式程序时,要预料到用户可能输入错误,要设计能处理用户错误输入的程序。

8.5.2 混合数值和字符输入

在混合数值和字符输入时要注意丢弃换行符。可以使用以下的while循环:

while(getchar()!='\n')

        continue;

8.6 输入验证

实际生活中用户不一定会按照程序的指令行事。用户的输入和程序期望的输入不匹配时常发生,会导致程序运行失败。要预料到一些可能的输入错误。

输入的错误包括输入范围错误,输入类型错误等。

程序越大,使用模块化就越重要。

8.7 菜单浏览

菜单可以为用户带来方便,菜单提供很多选项,用户输入选项随后根据选项完成任务。但是用户可能输入错误选项,程序要能够处理输入错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值