《C++程序设计教程(第3版)》——第3章,第1节传统的输入输出函数实现方法

简介:

本节书摘来自华章出版社《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语言的输入输出函数。

相关文章
|
3天前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
29 6
|
5月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
5月前
|
算法 数据挖掘 Shell
「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
还在为生信软件的安装配置而烦恼?micromamba(micromamba是mamba包管理器的小型版本,采用C++实现,具有mamba的核心功能,且体积更小,可以脱离conda独立运行,更易于部署)帮你解决!
139 1
|
5月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
180 6
|
5月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
69 0
|
5月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
147 1
|
5月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
690 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
5月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
100 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
5月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
867 1
|
5月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
52 3