C++从入门到精通——C++输入和输出

C++输入和输出

  • 前言
  • 一、C++打印`Hello World`
  • 二、C++输入&输出
    • 关于I/O流
    • C++输入&输出
    • cout函数
    • cin函数
    • endl函数
  • 三、C++输入和输出的说明
    • printf、scanf和cout、cin的区别
    • cout函数和cin函数控制精度和宽度
    • std命名空间的使用惯例


前言

C++中的输入和输出主要通过标准库中的iostream类实现。使用cin对象从标准输入(如键盘)读取数据,使用cout对象将数据写入标准输出(如屏幕)。

可能大家总是会看到像这样的头文件#include<bits/stdc++.h>,其实这个头文件包含的是C++里大多数的头文件,在参加竞赛的时候就不需要花时间来写很多头文件了,直接写这一个就够了


一、C++打印Hello World

新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物,

在这里插入图片描述

那C++是否也应该向这个美好的世界来声问候呢?我们来看下C++是如何来实现问候的。

ps:在VC6.0中需要引用的头文件是#include<iostream.h>本文使用的是VS2022,以前一些老的编译器需要.h,新版编译器一般是不需要.h

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{cout << "Hello world!!!" << endl;return 0;
}

在这里插入图片描述

二、C++输入&输出

在C++中想要调用函数除了引用头文件外还需要引用命名空间,关于命名空间可以看我C++从入门到精通——命名空间这篇文章,之所以需要这样,是为了防止冲突,本文的输入和输出函数都在命名空间std

关于I/O流

输入/输出流是计算机程序中用于读取和写入数据的一种方式。它允许程序从外部设备(如硬盘、键盘、网络等)读取数据,或将数据写入到外部设备中。

I/O流可以分为字节流和字符流两种类型。

字节流以字节(8位)为单位进行读写。它提供了一种通用的方式来处理任意类型的数据,包括文本、图片、音频等。常见的字节流类有InputStreamOutputStream

ps:根据InputStreamOutputStream,我们可以看到C++输入输出的头文件#include <iostream>取的就是输入和输出流的英文简写

字符流以字符(16位)为单位进行读写。它提供了更方便的方式来处理文本数据,支持字符的编码和解码。常见的字符流类有ReaderWriter

I/O流还可以根据读写的方式分为同步流和异步流。

同步流是指程序在读写数据时会阻塞,直到读写操作完成才继续执行后面的代码。它适用于数据量较小的情况,或者需要数据顺序读写的场景。

异步流是指程序在读写数据时不会阻塞,可以继续执行后面的代码。它适用于数据量较大、需要并发读写的情况,可以提高程序的性能。

在使用I/O流时,程序需要先创建流对象,然后通过流对象进行数据的读写操作。读取数据时,程序会从流中读取一定数量的字节或字符,并将其存储在内存中;写入数据时,程序会将内存中的字节或字符写入到流中,以传输到外部设备。

I/O流是计算机程序中常用的数据输入输出方式,它提供了灵活和高效的读写操作,使程序能够与外部设备进行有效的数据交互。

C++输入&输出

C++输入&输出是编程中不可或缺的两个环节,它们分别负责从外部获取数据和将程序处理结果展示给用户。在C++中,标准库提供了一组丰富的I/O函数和流对象,使得输入和输出操作变得简单而高效。(即#include <iostream>

从输入的角度来看,C++提供了多种方式来接收用户或其他数据源提供的信息。最常用的方式是使用cin对象,它是与标准输入流(通常是键盘)相关联的istream(标准输入流)对象。例如,我们可以使用cin >>运算符来读取整数、浮点数、字符串等各种类型的数据。此外,C++还提供了scanf函数,它提供了更多的格式化输入功能,允许我们按照指定的格式读取数据。(C++是兼容C语言的,所以C语言的语法C++也能用,主要根据自己的爱好)

输出方面,C++同样提供了多种方式来展示程序的处理结果。最常用的方式是使用cout对象,它是与标准输出流(通常是显示器)相关联的ostream(标准输出流)对象。通过cout <<运算符,我们可以将各种类型的数据输出到屏幕上。此外,C++还提供了printf函数,它提供了类似于scanf的格式化输出功能,允许我们按照指定的格式输出数据。

在实际编程中,输入和输出通常是紧密相关的。例如,在编写一个计算器程序时,我们需要从用户那里获取输入的数字和运算符,然后进行计算并将结果输出给用户。在这个过程中,输入和输出都是必不可少的环节。

为了提高程序的健壮性和用户友好性,我们还需要注意一些输入输出的细节问题。例如,在读取用户输入时,我们应该检查输入的有效性并给出相应的错误提示;在输出结果时,我们应该注意格式化和排版,使得输出结果清晰易读。

总之,C++输入&输出是编程中不可或缺的两个环节。通过合理使用C++提供的I/O函数和流对象,我们可以轻松地实现数据的输入和输出操作,为编写高效、健壮、用户友好的程序打下坚实的基础。

cout函数

cout函数是C++中的标准输出函数,用于将数据输出到控制台或其他输出设备。它位于iostream头文件中,使用前需要包含该头文件。cout函数的原型为:

std::ostream& cout (std::ostream& os);//&在c++中可以是取地址,也可以是取别名,具体可看后续文章讲解

cout函数可以接受各种数据类型作为参数进行输出,并且可以通过运算符重载的方式实现对不同数据类型的输出。使用cout函数进行输出时,可以使用插入运算符(<<)来将数据插入到输出流中。

例如,输出一个整数可以使用以下语句:

int num = 10;
cout << num;

输出一个字符串可以使用以下语句:

std::string str = "Hello, world!";
cout << str;

cout函数可以与其他输出操作符一起使用,以便于输出多个数据。

int num1 = 10;
int num2 = 20;
cout << "Numbers: " << num1 << " and " << num2;

上述代码输出结果为:"Numbers: 10 and 20"

ps:cout函数打印数据是自动识别类型的不需要我们像printf一样打印类型

cin函数

cin函数是C++语言中的标准输入流函数,用于从用户输入获取数据。它可以读取各种类型的数据,如整数、浮点数、字符、字符串等。cin函数可以与运算符>>结合使用,将用户输入的数据赋值给相应的变量。例如:

int num;
cout << "请输入一个整数:";
cin >> num;
cout << "您输入的整数是:" << num << endl;

在上面的代码中,cin函数用于读取用户输入的整数,并将其赋值给变量num。然后,使用cout函数将变量num的值输出到屏幕上。

需要注意的是,cin函数会按照空格或回车键将输入的内容分割成多个部分,并分别赋值给相应的变量。可以使用getline函数来读取包含空格的字符串。

ps:cin函数也是自动识别类型的不需要我们像scanf一样打印类型

endl函数

函数名: endl

功能: 在输出流中插入一个换行符,并刷新输出缓冲区

用法示例:

#include <iostream>
using namespace std;int main() {cout << "Hello, World!" << endl;// 或者cout << "Hello, World!" << '\n' << flush;  // '\n'为换行符, flush刷新输出缓冲区return 0;
}

解释: endl是C++标准库中iostream头文件中的一个输出控制符。当在输出流中插入endl时,它会在输出流中插入一个换行符,并刷新输出缓冲区。刷新输出缓冲区的作用是将缓冲区中的内容立即刷新到输出设备上,而不是等待缓冲区满或程序结束时才刷新。

三、C++输入和输出的说明

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
    以及按命名空间使用方法使用std
  2. coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream>头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。
  5. 实际上coutcin分别是ostreamistream类型的对象,>><<也涉及运算符重载等知识,这些我将在后续文章讲解

注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。

#include <iostream>
using namespace std;int main()
{int a;double b;char c;// 可以自动识别变量的类型cin>>a;cin>>b>>c;cout<<a<<endl;cout<<b<<" "<<c<<endl;return 0;
}

printf、scanf和cout、cin的区别

printfscanf是C语言的标准输入输出函数,而coutcin是C++语言的输入输出流对象。

主要区别如下:

  1. 语法:printfscanf使用C语言的函数调用语法,而coutcin使用C++的流对象调用语法。
  2. C++特性:coutcin支持C++的一些特性,如运算符重载、类型安全等。而printfscanf没有这些特性。
  3. 格式化输出:printfscanf可以使用格式控制符进行格式化输出和输入,而coutcin通常使用<<>>运算符来实现格式化输出和输入。
  4. 错误处理:printfscanf的错误处理相对简单,它们返回一个错误代码来指示是否成功。而coutcin则使用C++的异常机制来处理错误。
  5. 功能:coutcin提供了更多的功能,包括自动类型转换、流控制、格式化输出等。

总的来说,printfscanf是C语言的输入输出函数,功能相对简单,而coutcin是C++语言的输入输出流对象,功能更丰富,更方便使用。这两种方法可以根据读者自己的喜好选择合适的来使用

cout函数和cin函数控制精度和宽度

关于控制精度和宽度,在我看来在某些条件下C++的方法不如C语言的方法,我们可直接使用printfscanf完美解决

控制精度:

使用cout函数输出浮点数时,可以使用setprecision函数来控制输出的精度。setprecision函数位于<iomanip>头文件中,可以通过调用它来设置输出的精度。例如:

#include<iostream>
#include<iomanip>int main() {double num = 3.14159265358979323846;std::cout << std::setprecision(5) << num << std::endl; // 输出3.1416std::cout << std::setprecision(9) << num << std::endl; // 输出3.14159265return 0;
}

控制宽度:

使用cout函数输出时,可以使用setw函数来设置输出的宽度。setw函数位于<iomanip>头文件中,可以通过调用它来设置输出的宽度。例如:

#include<iostream>
#include<iomanip>int main() {int num = 123;std::cout << std::setw(5) << num << std::endl; // 输出  123(5个宽度)std::cout << std::setw(3) << num << std::endl; // 输出 123(3个宽度不够时会自动扩展)return 0;
}

控制输入的精度和宽度:

使用cin函数输入时,可以使用setprecisionsetw函数来设置输入的精度和宽度。例如:

#include<iostream>
#include<iomanip>int main() {double num;std::cin >> std::setprecision(5) >> num; // 输入3.1416,只保留五位有效数字std::cout << num << std::endl;int num2;std::cin >> std::setw(3) >> num2; // 输入 123,只读取三个字符std::cout << num2 << std::endl;return 0;
}

注意:setprecisionsetw函数只对之后的输出或输入起作用,并且它们的效果是持续的,直到下次被修改或程序结束。

std命名空间的使用惯例

std是C++标准库的命名空间,如何展开std使用更合理呢?

  1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 入门及其基本指令(上)

目录 0 .引言 1. XShell 远程登录 Linux 1.1 云服务器 1.2. XShell 远程登陆 Linux 2. 详解 Linux 基本指令 2.1 ls 指令 2.2 pwd 指令 2.3 cd 指令 2.4 touch 指令 2.5 mkdir指令 2.6 rmdir指令 && rm 指令 0 .引言 如今&#xff0c;Linux 在服务器…

uniapp vue-cli项目配置devServer和outPutDir

上一次说了使用vue-cli创建uni-app项目&#xff0c;然后使用第三方工具开发打包&#xff0c;利用jekins发布等。 这一次我想解决以下问题&#xff1a; 1我想配置devServer供开发环境使用&#xff0c;这样也可以解决开发环境的跨域问题 2以前我的每个版本信息都配置在package…

黑群晖基于docker配置frp内网穿透

前言 我的黑群晖需要设置一下内网穿透来外地访问&#xff0c;虽然zerotier的p2p组网已经很不错了&#xff0c;但是这个毕竟有一定的局限性&#xff0c;比如我是ios的国区id就下载不了zerotier的app&#xff0c;组网不了 1.下载镜像 选择第一个镜像 2.映射文件 配置frpc.ini&a…

C 指向指针的指针

指向指针的指针是一种多级间接寻址的形式&#xff0c;或者说是一个指针链。通常&#xff0c;一个指针包含一个变量的地址。当我们定义一个指向指针的指针时&#xff0c;第一个指针包含了第二个指针的地址&#xff0c;第二个指针指向包含实际值的位置。 一个指向指针的指针变量…

常见6种开源协议比较

前言 常见的开源许可协议有6种是比较常见和广泛使用的&#xff0c;每种协议都有其特定的使用场景和约束条件。这6种分别是GPL, LGPL&#xff0c;MIT许可证&#xff0c; Apache许可证&#xff0c;BSD许可证和Mozilla Public License&#xff08;MPL&#xff09;. 6种开源许可协议…

Redis 开源协议变更背后:开源软件与云计算巨头的竞争博弈

01 背景 在云计算的风潮下&#xff0c;开源软件的生态环境正在经历一场剧变。2024 年 3 月 20 日&#xff0c;这种变化在 Redis 身上得到了集中体现。Redis 商业公司 CEO Rowan Trollope 宣布&#xff0c;Redis 将从 BSD 3-Clause 许可证过渡到双重许可证模式&#xff0c;包括…

【Redis】Redisson实现分布式锁

Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务&#xff0c;其中就包含了各种分布式锁的实现。 官网地址 GitHub地址 Redisson入门 1.引…

Nexus3 Docker 私有仓库

Nexus3 Docker 私有仓库 安装并部署 Nexus3 $ docker search nexus3$ docker pull sonatype/nexus3$ mkdir /home/tester/data/docker/nexus3/sonatype-work $ sudo chown -R 200 /home/tester/data/docker/nexus3/sonatype-work$ docker run -d --namenexus3 \ --restartalw…

面试题目--3.19

1.foo()和foo()之间有什么区别&#xff1f; 代表所有的warning忽略 2.什么是csrf攻击&#xff1f;如何防范&#xff1f; csrf&#xff0c;跨站请求伪造&#xff0c;攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。 基本原理&#xff1a;用户访问a网站登录并生成了coo…

亲历中国智驾大战,吴新宙加入NVIDIA半年后首秀

‍作者 |张祥威 编辑 |德新 吴新宙近日现身NVIDIA GTC&#xff0c;这是其从小鹏汽车离开加入NVIDIA之后的首次公开亮相。 吴目前担任NVIDIA汽车事业部副总裁&#xff0c;全面负责NVIDIA的车载计算产品线DRIVE平台的产品定义以及工程落地工作。吴新宙最广为人知的经历&#xf…

3.28C++

复数类的实现&#xff0c;写出三种构造函数&#xff0c;算术运算符、关系运算符、逻辑运算符重载尝试实现自增、自减运算符的重载 #include <iostream> using namespace std; class Num {int rel; //实部int vir; //虚部 public:Num():rel(2),vir(1){}Num(int rel,…

深入解析RSA算法原理及其安全性机制

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、RSA算法简介二、RSA算法原理2.1 背景与数学基础2.2 密钥生成2.3 加密过程2.4 解密过程 三、安全性考虑四、RSA的使用五、…

数据结构进阶篇 之 【二叉树链序存储】的整体实现讲解

封建迷信我嗤之以鼻&#xff0c;财神殿前我长跪不起 一、二叉树链式结构的实现 1.二叉树的创建 1.1 手动创建 1.2 前序递归创建 2.二叉树的遍历 2.1 前序&#xff0c;中序以及后序遍历概念 2.2 层序遍历概念 2.3 前序打印实现 2.4 中序打印实现 2.4 后序打印实现 2.…

SpringBoot项目启动成功,但是调用接口直接报NOT FOUND 404

问题描述 SpringBoot项目启动成功&#xff0c;但是调用接口直接报NOT FOUND 404 解决办法 启动类中ComponentScan(basePackages {“com.afclab”})中的扫包路径和项目路径不一样&#xff0c;导致扫不到Controller等组件&#xff0c;修改成和项目路径一样就可以解决&#xf…

MYSQL高阶语句(一)

目录 一、常用查询 1、order by 按关键字排序 1.升序排序 2.降序排序 3.结合where进行条件过滤再排序 4.多字段排序 2、区间判断及查询不重复记录 1. and / or 且与或的使用 2.嵌套、多条件使用 3.distinct 查询不重复记录 3、GROUP BY 对结果进行分组 4、Li…

独立站攻略|如何使用SEO代理优化网站排名?

每天&#xff0c;互联网上都会生成和共享大量信息&#xff0c;这使得预测哪个关键字或主题将成为趋势变得很有挑战性&#xff0c;因此人们可以预测和优化他们的搜索引擎排名。但使用“SEO 代理”&#xff0c;就会使得SEO优化更加有效且精准。 一、什么是SEO&#xff1f; 简而言…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项样卷

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜…

Ainx的多路由模式

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

ubuntu的常用操作

一、用户 1.1 创建新用户 1.1.1 添加、修改、删除 1.2 超级用户root 切换到root用户&#xff0c;有全部权限&#xff0c;可以直接使用任何命令。 我们在什么时候才会切换到root用户进行操作呢&#xff1f;当我们使用某些命令&#xff0c;不想前面一直加sudo的话&#xff0c;…

2024年【道路运输企业主要负责人】考试题库及道路运输企业主要负责人报名考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试题库根据新道路运输企业主要负责人考试大纲要求&#xff0c;安全生产模拟考试一点通将道路运输企业主要负责人模拟考试试题进行汇编&#xff0c;组成一套道路运输企业主要负责人全真模拟考…