本节书摘来自华章出版社《C++程序设计教程(第3版)》一书中的第3章,第3.1节传统的输入输出函数实现方法,作者张志航,更多章节内容可以访问云栖社区“华章计算机”公众号查看
第3章 简单的输入输出
通过前面的章节我们了解了组成一个程序的基本数据元素,下面我们就可以在数据元素的基础上开始学习编写简单的C++程序了。本章主要介绍计算机程序设计的基础:在C++程序中实现数据输入输出的基本方法。由于C++中数据输入输出的实现机制与后续章节中的面向对象重载等技术有着密切的联系,因此在没有系统地学习面向对象设计思想之前无法对此进行详细的介绍。因此,本章只对C++中数据输入输出的使用方法做简单的介绍。有关C++编译器提供的完整的输入输出流体系结构的实现原理,将在第14章中进行详细的介绍。
3.1 传统的输入输出函数实现方法
由于计算机是一种信息处理机器,它的主要工作就是处理各种信息和数据。而这些信息不可能都是由计算机自己生成的,因此几乎每个实际应用的程序都需要有将用户的信息输送给计算机的功能。同时,计算机的最终运算结果也不可能只是供计算机自己使用,它必须以某种方式显示出来(显示在屏幕上或者打印到纸上),以供用户查看。因此,在所有实际应用的程序中,最基本的功能就是输入和输出功能。一个实际应用的程序应该具有接收用户输入数据的能力(包含零个或者多个输入),运算的结果必须要以某种方式显示给用户看(至少包含一个或者包含多个输出)。一般来说,不包含输入输出功能的程序是一个没有实际使用价值的程序。
程序在执行期间,接收外部信息的操作称为程序的输入(Input),而把程序的数据向外部发送的操作称为程序的输出(Output)。由于输入和输出功能往往是成对出现的,我们经常会用英文缩写组合“I/O”来表示它们。
由于C++是在C语言的基础上发展扩充而来的,为了保证程序的兼容性,它也支持C语言中输入输出的实现方法。在C语言中没有定义输入输出语句,输入输出功能是通过输入输出系统库中的scanf()和printf()等函数来实现的,其中scanf()函数负责输入操作,printf()函数负责输出操作。我们称使用C语言库函数实现程序输入输出功能的方法为传统的输入输出实现方法。
在C语言中使用系统库函数,一般要包含相应的函数库文件。函数库文件总是被引用在程序文件的最前方,所以又被称为头文件(Header File),用文件扩展名.h来表示。C语言的输入输出系统库函数一般放在stdio.h(standard input/output header file)文件中,使用大多数输入输出系统库函数时都要包含这个头文件,但是对于scanf()和printf()函数例外。这两个函数可以在不包含任何头文件的情况下使用。但是,C++编译器对程序的语法检查要远远比C语言编译器严格,在C++编译器中编译包含scanf()和printf()函数而又没有包含对应的头文件的程序时,往往编译器会报告错误,这一点学习过C语言程序设计的程序员必须特别注意。在C++编译器中使用任何一个系统库函数,都需要包含相应的头文件。程序例3.1中举例说明了传统的输入输出函数在应用程序中的基本使用方法。
例3.1 演示传统的输入输出函数的使用方法。
`include
int main()
{
char a;
printf("Please input a character:");
scanf("%c", &a); // "%c"表示输入的变量a是char型的
printf("The character is:%c \n", a);
return 0;
}`
由于scanf()和printf()函数的使用方法比较复杂,因此,在C++中利用先进的重载(Over-loading)等面向对象技术,重新设计了一套相对便于使用的输入输出方法,称为输入输出流技术。限于篇幅,本书不再介绍scanf()和printf()函数的用法,对此感兴趣的读者可参考C语言的相关书籍,本章重点介绍C++中特有的输入输出流技术。
使用C++编程时,建议尽量使用C++提供的输入输出流技术来实现输入输出操作。若在一个程序中同时使用C++的输入输出流技术和C语言的输入输出函数方法来完成输入输出操作,有时会出现一些异常现象,如输入输出语句的执行顺序不对等。当学习Visual C++高级编程时,读者也会知道如果不使用输入输出流等C++特有的技术,将无法在程序编写过程中利用Visual C++提供的很多有用的跟踪调试等辅助工具。
同时,由于输入输出流的书写格式简洁,阅读方便,符合现代软件设计中的可读性要求,因此再次建议读者在书写C++程序的时候彻底放弃C语言的输入输出函数。