购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 数据的输入与输出

视频讲解

视频讲解:资源包\Video\02\2.5数据的输入与输出.mp4

在用户与计算机进行交互的过程中,数据输入和数据输出是必不可少的操作过程,计算机需要通过输入来获取来自用户的操作指令,并通过输出来显示操作结果。本节将介绍数据输入与输出的相关内容。

2.5.1 控制台屏幕

在NT内核的Windows操作系统中,为了保留DOS系统的风格,提供了控制台程序。单击系统的“开始”→“运行”,在“打开”输入框中输入“cmd.exe”,然后按<Enter>键,可以启动控制台程序。在控制台中可以运行DIR、CD、DELETE等DOS系统中的文件操作命令,也可以启动Windows的程序。控制台屏幕如图2.17所示。

图2.17 控制台屏幕

使用Dev-C++创建的控制台工程的程序都将运算结果输出到这个控制台屏幕上,它是程序显示输出结果的地方。

2.5.2 C++语言中的流

在C++语言中,数据的输入和输出包括标准输入/输出设备(键盘、显示器)、外部存储介质(磁盘)上的文件和内存的存储空间3个方面的输入/输出。标准输入设备和标准输出设备的输入/输出简称标准I/O,外存磁盘上文件的输入/输出简称文件I/O,内存中指定的字符串存储空间的输入/输出简称串I/O。

在C++语言中,数据之间的传输操作称为“流”。C++语言中的流既可以表示数据从内存传输到某个载体或设备中,即输出流;也可以表示数据从某个载体或设备传输到内存缓冲区变量中,即输入流。C++语言中所有的流都是相同的,但文件流可以不同(文件流会在后面的章节中讲到)。使用流以后,程序用流统一对各种计算机设备和文件进行操作,使程序与设备、文件无关,从而提高了程序设计的通用性和灵活性。

C++语言定义了I/O类库供用户使用,标准I/O操作有4个类对象,它们分别是cin、cout、cerr和clog。其中,cin代表标准输入设备键盘,也称为cin流或标准输入流;cout代表标准输出设备显示器,也称为cout流或标准输出流。当进行键盘输入操作时使用cin流,当进行显示器输出操作时使用cout流,当进行错误信息输出操作时使用cerr或clog。

C++语言中的流通过重载运算符“<<”和“>>”执行输入和输出操作。输出操作是向流中插入一个字符序列,因此,在流操作中,将左移运算符“<<”称为插入运算符。输入操作是从流中提取一个字符序列,因此,将右移运算符“>>”称为提取运算符。例如,C++程序的输出示意图如图2.18所示。

图2.18 C++程序的输出示意图

1.cout语句的一般格式

cout代表显示器,执行cout<<x操作就相当于把x的值输出到显示器。

首先把x的值输出到显示器屏幕上,在当前屏幕光标位置显示出来,然后cout流恢复到等待输出的状态,以便继续通过插入运算符输出下一个值。当使用插入运算符向一个流中输出一个值后,输出下一个值时,这个值将被紧接着放在上一个值的后面。所以,为了让流中的前后两个值分开,可以在输出一个值后接着输出一个空格,或者一个换行符,或者其他所需要的字符或字符串。

一条cout语句可以分写成若干行。例如:

可以写成:

也可以写成多条cout语句:

以上3种情况的输出均是正确的。

2.cin语句的一般格式

cin代表键盘,执行cin>> x 就相当于把从键盘输入的数据赋值给变量。

当从键盘输入数据时,只有在输入完数据并按下<Enter>键后,系统才把该行数据存入键盘缓冲区,供cin流顺序读取给变量。另外,从键盘输入的各个数据之间必须用空格或回车符分开,因为cin为一个变量读入数据时是以空格或回车符作为其结束标志的。

说明

n >> x 操作中的 x 为字符指针类型时,则要求从键盘的输入中读取一个字符串,并把它赋值给x所指向的存储空间。若x没有事先指向一个允许写入信息的存储空间,则无法完成输入操作。另外,从键盘输入的字符串的两边不能带有双引号定界符,若有,则只作为双引号字符看待。对于输入的字符也是如此,不能带有单引号定界符。

cin语句相当于C函数scanf,将用户的输入赋值给变量。示例如下:

将用户输入的数打印出来。

2.5.3 流输出格式控制

1.cout输出格式控制

在头文件iomanip.h中定义了一些控制流输出格式的函数,在默认情况下,整型数按十进制形式输出,也可以通过hex将其设置为按十六进制形式输出。流操作控制的具体函数如表2.7所示。

表2.7 流操作控制的具体函数

数据输入/输出的格式控制还有更简便的形式,就是使用头文件iomanip.h中提供的操作符。使用这些操作符不需要调用成员函数,只要把它们作为插入操作符("")的输出对象即可。

dec:转换为按十进制形式输出整数,是默认的输出格式。

oct:转换为按八进制形式输出整数。

hex:转换为按十六进制形式输出整数。

ws:从输出流中读取空白字符。

endl:输出换行符“\n”并刷新流。刷新流是指把流缓冲区中的内容立即写入对应的物理设备。

ends:输出一个空字符“\0”。

flush:只刷新一个输出流。

实例03 控制打印格式程序

实例位置:资源包\Code\SL\02\03

程序运行结果如图2.19所示。

图2.19 控制打印格式程序的运行结果

拓展训练

(1)银行的存款年利率为2.95%,如果在银行中存入10000元,那么一年后可以取出多少钱?(小数点后保留两位) (资源包\Code\Try\005)

(2)向控制台输出圆周率,保留4位小数,并四舍五入(即输出3.1416)。 (资源包\Code\Try\006)

2.printf函数输出格式控制

C++语言中还保留着C语言的屏幕输出函数printf,使用printf函数可以将任意数量类型的数据输出到屏幕。printf函数的声明形式如下:

printf是变参函数,其中,数值列表中可以有多个数值,数值的个数不是确定的,数值之间用逗号运算符隔开;控制格式表示数值以哪种格式输出,控制格式的数量要与数值的个数一致,否则程序运行时会产生错误。

控制格式是由%+特定字符构成的,形式如下:

“*”表示可以使用占位符,“域宽”表示输出内容的长度。如果输出内容的长度没有域宽长,则用占位符占位;如果输出内容的长度比域宽长,那么就按实际内容输出,以适应域宽。“长度”决定输出内容的长度,例如,%d代表以整型数据格式输出。输出类型如表2.8所示。

表2.8 输出类型

(1)d格式符:以十进制形式输出整数。它有以下几种用法:

%d,按整型数据的实际长度输出。

%*md,m为指定的输出字段的宽度。如果数据的位数小于m,则用“*”所指定的字符占位;如果“*”未指定字符,则用空格占位。如果数据的位数大于m,则按实际位数输出。

%ld,输出长整型数据。

(2)o格式符:以八进制形式输出整数。它有以下几种用法:

%o,按整型数据的实际长度输出。

%*mo,m为指定的输出字段的宽度。如果数据的位数小于m,则用“*”所指定的字符占位;如果“*”未指定字符,则用空格占位。如果数据的位数大于m,则按实际位数输出。

%lo,输出长整型数据。

(3)x格式符:以十六进制形式输出整数。它有以下几种用法:

%x,按整型数据的实际长度输出。

%*mx,m为指定的输出字段的宽度。如果数据的位数小于m,则用“*”所指定的字符占位;如果“*”未指定字符,则用空格占位。如果数据的位数大于m,则按实际位数输出。

%lx,输出长整型数据。

(4)s格式符:用来输出一个字符串。它有以下几种用法:

%s,将字符串按实际长度输出。

%*ms,输出的字符串占m列。如果字符串本身的长度大于m,则突破m的限制,用“*”所指定的字符占位;如果“*”未指定字符,则用空格占位。如果字符串本身的长度小于m,则左补空格。

%-ms,如果字符串本身的长度小于m,则在m列范围内,字符串向左靠,右补空格。

%m.ns,输出的字符串占m列,但只取字符串中左端的n个字符。这n个字符被输出在m列的右侧,左补空格。

%-m.ns,输出长整型数据。输出的字符串占m列,但只取字符串中左端的n个字符。这n个字符被输出在m列的左侧,右补空格。

(5)f格式符:以小数形式输出实数。它有以下几种用法:

%f,不指定字段的宽度,整数部分全部输出,小数部分输出6位。

%m.nf,输出的数据占m列,其中有n位小数。如果数据的长度小于m,则左补空格。

%-m.nf,输出的数据占m列,其中有n位小数。如果数据的长度小于m,则右补空格。

(6)e格式符:以指数形式输出实数。它有以下几种用法:

%e,不指定输出的数据所占的宽度和小数位数。

%m.ne,输出的数据占m位,其中有n位小数。如果数据的长度小于m,则左补空格。

%-m.ne,输出的数据占m位,其中有n位小数。如果数据的长度小于m,则右补空格。

实例04 使用printf进行输出

实例位置:资源包\Code\SL\02\04

程序运行结果如图2.20所示。

图2.20 使用printf进行输出

拓展训练

(1)光在真空中的速度为299792458米/秒,请用科学计数法输出光速。 (资源包\Code\Try\007)

(2)地球的年龄约为45.5亿年,请用科学计数法输出地球的年龄。 (资源包\Code\Try\008) +tClHhEyu4artLcMPxLBoKzMbIcQcWs82SOvi++zlgi+yumHX/xr0w0/+CgaxYKv

点击中间区域
呼出菜单
上一章
目录
下一章
×