《C++语言入门经典》一2.3 数据的输入与输出

简介: 本节书摘来自华章出版社《C++语言入门经典》一书中的第2章,第2.3节,作者 郭鑫 顾彦玲,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.3 数据的输入与输出

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

2.3.1 格式输出函数

C++语言中保留了C语言中的屏幕输出函数printf。使用printf可以将任意数量和类型的数据
输出到屏幕。
printf函数的作用是向终端(输出设备)输出若干任意类型的数据。printf函数的一般格
式为:
printf(格式控制,输出列表)
括号内包括格式控制和输出列表两部分。

(1)格式控制
格式控制是用双引号引起来的字符串,也称为转换控制字符串。其中包括两种字符,一种
是格式字符,另一种是普通字符。
格式字符用来进行格式说明,其作用是将输出的数据转化为指定的格式输出。格式字
符以“%”字符开头。
普通字符是需要原样输出的字符,其中包括双引号内的逗号、空格和换行符。
(2)输出列表
输出列表中列出的是要输出的一些数据,也可以是变量或表达式。
例如,要输出一个整型变量时,可以用下面的语句:

int iInt=10; 
printf("this is %d",iInt);

执行上面的语句显示出来的字符是“this is 10”。在格式控制双引号中的字符是“this is
%d”,其中的“this is”字符串是普通字符,而“%d”是格式字符,表示输出的是后面iInt 的
数据。
由于printf是函数,“格式控制”和“输出列表”都是函数的参数,因此printf函数的一般
形式也可以表示为:
printf(参数1,参数2,…,参数n)
函数中的每一个参数按照给定的格式和顺序依次输出。例如,显示一个字符型变量和整型
变量的语句如下:

printf("the Int is %d,the Char is %c",iInt,cChar);

表2.4中列出了有关printf函数的格式字符及其功能说明。
image

【例2.2】 使用格式输出函数printf。
在本实例中,使用printf函数对不同类型变量进行输出,对使用printf函数所用到的输出格
式进行分析。

实例位置:光盘MR源码第2章2.2

#include "stdafx.h" 
int main()
{ 
 int iInt=10; /*定义整型变量*/ 
 char cChar='A'; /*定义字符型变量*/ 
 float fFloat=12.34f; /*定义单精度浮点型*/ 
 printf("the int is: %d\n",iInt); /*使用printf函数输出整型*/ 
 printf("the char is: %c\n",cChar); /*输出字符型*/ 
 printf("the float is: %f\n",fFloat); /*输出浮点型*/ 
 printf("the stirng is: %s\n","I LOVE YOU"); /*输出字符串*/ 
 return 0; 
}

上述程序中,定义了一个整型变量iInt,并在printf函数中使用格式字符%d进行输出;为字
符型变量cChar赋值为'A',在printf函数中使用格式字符%c输出字符。格式字符%f用来输出实
型变量的数值。在最后一个printf输出函数中,使用%s将一个字符串输出,字符串内容不包括
双引号。
image

另外,在格式说明中,在%符号和上述格式字符间可以插入几种附加格式说明字符,如
表2.5所示。

image

说明
1)在使用printf 函数时,除X、E、G外,其他格式字符必须用小写字母,如%d 不能写
成%D 。
2)如果想输出“%”符号,则需要在格式控制处使用“%%”进行输出。
image

【例2.3】 在printf函数中使用附加符号。
在本实例中,使用printf 函数的附加格式说明字符,对输出的数据进行更为精确的格式
设计。
实例位置:光盘MR源码第2章2.3

#include "stdafx.h" 
int main()
{ 
 long iLong=100000; /*定义长整型变量,为其赋值*/
 printf("the Long is %ld\n",iLong); /*输出长整型变量*/
 printf("the string is: %s\n","LOVE"); /*输出字符串*/
 printf("the string is: %10s\n","LOVE"); /*使用m控制输出列*/
 printf("the string is: %-10s\n","LOVE"); /*使用-表示向左靠拢*/
 printf("the string is: %10.3s\n","LOVE"); /*使用n表示取字符数*/
 printf("the string is: %-10.3s\n","LOVE");
 return 0; 
}

1)在程序代码中,在使用printf 函数对定义的长整型变量进行输出时,应该在%d 格式字
符中添加l字符,继而输出长整型变量。
2)%s 用来输出一个字符串的格式字符,在结果中可以看到输出了字符串“LOVE”。
3)%10s 为格式%ms,表示输出字符串占m列,如果字符串本身长度大于m,则突破m
的限制,将字符串全部输出;若字符串小于m,则用空格进行左补齐。可以看到在字符串
“LOVE”前后存在6个空格。
4)%-10s 格式为%-ms,表示如果字符串长度小于m,则在m列范围内,字符串向左靠,右
补空格。
5)%10.3s 格式为%m.ns,表示输出占m列,但只取字符串左端n个字符。这n个字符输出在
m列的右侧,左补空格。
6)%-10.3s 格式为%-m.ns,其中m、n含义同上,n个字符输出在m列范围内的左侧,右补
空格。如果n>m,则m自动取n值,即保证n个字符正常输出。
程序运行结果如图2.3所示。

2.3.2 格式输入函数

与格式输出函数printf相对应的是格式输入函数scanf。该函数的功能是指定固定的格式,

 并且按照指定的格式接收用户在键盘上输入的数据,最后将数据存储在指定的变量中。
scanf函数的一般格式为:
scanf(格式控制,地址列表)
从scanf 函数的一般格式可以看出,参数位置中的格式控制与printf 函数的相同。例如,%d
表示十进制的整型,%c表示单字符。而在地址列表中,此处应该给出用来接收数据变量的地
址。例如,得到一个整型数据的操作如下:
scanf("%d",&iInt); /得到一个整型数据/
在上面的代码中,&符号表示取iInt变量的地址,因此不用关心变量的地址具体是多少,
只要在代码中变量的标识符前加&符号,就表示取变量的地址。
说明
编写程序时,在scanf函数的参数地址列表处,一定要使用变量的地址,而不是变量的
标识符,否则编译器会提示出错。
表2.6中列出了scanf函数中使用的格式字符及其功能说明。
image
说明
格式字符%s 用来输入字符串。将字符串送到一个字符数组中,在输入时以非空白字符
开始,以第一个空白字符结束。字符串以串结束标志“0”作为最后一个字符。
【例2.4】 使用scanf格式输入函数得到用户输入的数据。
在本实例中,利用scanf函数得到用户输入的两个整型数据,因为scanf函数只能用于输入
操作,所以若要在屏幕上显示信息,则需要使用显示函数。
实例位置:光盘MR源码第2章2.4

#include "stdafx.h" 
int main()
{ 
 int iInt1,iInt2; /*定义两个整型变量*/ 
 puts("Please enter two numbers:"); /*通过puts函数输出提示信息的字符串*/ 
 scanf("%d%d",&iInt1,&iInt2); /*通过scanf函数得到输入的数据*/ 
 printf("The first is : %d\n",iInt1); /*显示第一个输入的数据*/ 
 printf("The second is : %d\n",iInt2); /*显示第二个输入的数据*/ 
 return 0; 
}

1)为了能接收用户输入的整型数据,在程序代码中定义了两个整型变量iInt1和iInt2。
2)因为scanf函数只能接收用户输入的数据,而不能显示信息,所以先使用puts函数输出
一段字符表示信息提示。puts函数在输出字符串之后会自动进行换行,这样就可以省去使用换
行符的麻烦。
3)调用scanf 格式输入函数,在函数参数中可以看到,在格式控制的位置使用双引号将格
式字符包括,%d 表示输入的为十进制的整数。在参数中的地址列表位置,使用&符号表示变
量的地址。
4)此时变量iInt1 和iInt2 已经得到了用户输入的数据,调用printf 函数将变量进行输出,这
里要注意区分的是printf函数使用的是变量的标识符,而不是变量的地址。scanf函数使用的是
变量的地址,而不是变量的标识符。
说明
程序是怎样将输入的内容分别保存到指定的两个变量中的呢?原来,scanf函数使用空
白字符分隔输入的数据,这些空白字符包括空格符、换行符、制表符(Tab )。如在
本程序中,使用换行符作为空白字符。
image

在printf函数中,除了格式字符外,还有附加格式用于更为具体的说明,相应地,scanf函
数中也有附加格式说明字符用于更为具体的格式说明,如表2.7所示。
image

【例2.5】 使用附加格式说明scanf函数的格式输入。
在本实例中,将所有scanf附加格式都进行格式输入的说明,通过这些指定格式的输入,
对比输入前后的结果,观察其附加格式的效果。
实例位置:光盘MR源码第2章2.5

#include "stdafx.h" 
int main()
{
相关文章
|
4月前
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
98 2
|
21天前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
133 12
|
6月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
163 15
|
5月前
|
存储 C++
UE5 C++:自定义Http节点获取Header数据
综上,通过为UE5创建一个自定义HTTP请求类并覆盖GetResult方法,就能成功地从HTTP响应的Header数据中提取信息。在项目中使用自定义类,不仅可以方便地访问响应头数据,也可随时使用这些信息。希望这种方法可以为你的开发过程带来便利和效益。
200 35
|
6月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
105 8
|
7月前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
236 12
|
7月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
104 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
8月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
124 5
|
11月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
236 5
|
11月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)