C++中数据的输入输出介绍

C++中数据的输入输出介绍

C++中数据的输入输出涉及到的文件

<iostream>:这是C++标准库中最常用的头文件之一,包含了进行标准输入输出操作的类和对象,如std::cin、std::cout、std::endl等。

<iomanip>:该头文件提供了一些用于控制输入输出格式的函数和流控制符,比如std::setprecision、std::setw、std::fixed等。

<fstream>:这个头文件用于文件输入输出操作。它提供了用于读写文件的输入输出流类,如std::ifstream、std::ofstream等。

<sstream>:该头文件定义了用于字符串流的类,如std::istringstream、std::ostringstream等。它们可以方便地将数据从字符串转换为其他类型,或者将其他类型的数据转换为字符串。

<cstdio>或<stdio.h>:这是C语言中的头文件,也可以在C++中使用。它提供了一些与C标准库相关的输入输出函数,如scanf、printf、fgets、fputs等。

需要根据实际需求选择合适的头文件来进行数据的输入输出操作。例如,如果只是进行标准输入输出,只需要包含<iostream>即可;如果需要读写文件,需要包含<fstream>;如果需要进行字符串流的操作,需要包含<sstream>等。

下面介绍几种C++中数据的输入输出几种基本方式。

使用<iostream>头文件的cin和cout,getline函数和puts函数

cin和cout:这是C++标准库提供的输入输出流对象,用于从标准输入读取数据和向标准输出写入数据。例如,读入一个整数可以使用cin和>>运算符,输出一个整数可以使用cout和<<运算符:

#include <iostream>int main() {int num;std::cout << "请输入一个整数: ";std::cin >> num;std::cout << "您输入的整数是: " << num << std::endl;return 0;
}

在上面的例子中,我们使用std::cin从标准输入读取一个整数,并使用std::cout将其输出到标准输出。

getline函数用于从输入流中读取一行字符串,并保存到指定的变量中。puts函数用于将字符串输出到标准输出。getline函数可以用来读入一行字符串,而puts函数可以用来输出一个字符串。getline函数从输入流中读取一行字符,直到遇到换行符或文件结束符(\n或EOF)为止。puts函数将字符串打印到标准输出并自动加上换行符。需要注意的是,puts函数只能输出C风格的字符串,需要将string类型的字符串转换成C风格的字符指针,可以使用字符串的c_str()方法。使用getline和puts这两个函数的示例代码如下:

#include <iostream>int main() {std::string str;std::cout << "请输入一行字符串: ";std::getline(std::cin, str); // 读入一行字符串std::cout << "您输入的字符串是: " << str << std::endl;const char* cstr = str.c_str();std::puts(cstr); // 输出字符串return 0;
}

测试运行:

示例中“const char* cstr = str.c_str();”这行代码的作用是将 std::string 类型的字符串 str 转换为 C 风格的字符串(以 null 结尾的字符数组)。

为什么要使用 c_str() 函数呢?因为 std::puts() 函数接受的参数是一个 C 风格的字符串(即以 null 结尾的字符数组),而不是 C++ 的 std::string 类型。所以,在调用 std::puts() 函数之前,我们需要使用 c_str() 函数来获取 C 风格的字符串。C++ 中的 std::string 类型提供了一个成员函数 c_str(),它返回一个指向字符串数据的常量指针。通过调用 c_str() 函数,我们可以获取 std::string 对象中存储的字符数组的地址。

使用<cstdio>头文件的getchar 、 putchar及scanf、printf函数

getchar 和 putchar函数是两个常用的字符输入输出函数。

getchar() 函数用于从标准输入流(通常是键盘)读取单个字符。它不需要任何参数,并且会等待用户输入字符后才能继续执行程序。示例用法如下:

#include <cstdio>int main() {char c = getchar(); // 从标准输入读取一个字符putchar(c); // 将字符输出到标准输出return 0;
}

putchar() 函数用于将一个字符输出到标准输出流(通常是控制台)。示例用法如下:

#include <cstdio>int main() {char c = 'A';putchar(c); // 将字符 'A' 输出到屏幕return 0;
}

顺便提示:

getchar() 和 putchar() 最初设计用于处理 ASCII 字符,但它们也具备处理中文字符的功能。中文字符通常使用多字节编码(如UTF-8),怎么理解?

 getchar() 和 putchar() 函数可以处理中文字符,是因为它们是通过底层的操作系统或编译器提供的字符输入输出功能来实现的。底层的字符输入输出功能可能会根据不同的操作系统或编译器而有所差异,对于一些特殊的字符或编码方式,可能会出现问题。所以在处理中文字符时,最好使用支持中文字符的更高级的输入输出函数,如使用 <iostream> 头文件中的 std::cin 和 std::cout。

scanf和printf是C语言中常用的输入输出函数,也可以在C++中使用。scanf用于从标准输入读取数据,而printf用于向标准输出写入数据。如果要在C++中使用需要注意一些细节。一般情况下,scanf和printf可以和cin和cout等价地使用。例如,读入一个整数可以使用scanf,输出一个整数可以使用printf:

#include <cstdio>int main() {int num;printf("请输入一个整数: ");scanf("%d", &num); // 读入一个整数printf("您输入的整数是: %d\n", num); // 输出一个整数到标准输出return 0;
}

需要注意的是,scanf和printf需要使用格式化字符串来指定输入输出的数据类型,因此需要多写一些代码。同时,scanf的输入参数需要使用"取地址符"&,而printf的输出参数不需要。

scanf和printf格式化输入输出介绍

printf函数是用于格式化输出的函数,它可以将数据格式化输出到控制台或文件中。基本语法为:

int printf(const char* format, ...);

其中,format是一个字符串,包含了输出的格式。可以使用以下的转换字符以及相应的格式化说明符来指定输出的类型:

%d:以十进制整数的形式输出。

%f:以浮点数的形式输出。

%c:以字符的形式输出。

%s:以字符串的形式输出。

%p:以指针的形式输出。

%x:以十六进制数的形式输出。

scanf函数是用于格式化输入的函数,它可以从控制台或文件中按照指定的格式读取数据。

基本语法为:

int scanf(const char* format, ...);

其中,format是一个字符串,包含了输入的格式。可以使用与printf相同的转换字符和格式化说明符来指定输入的类型。

scanf函数接收用户或文件输入的数据,并根据格式化字符串中的要求进行读取和解析。它返回成功读取的参数个数。

再给一个使用scanf和printf函数的完整示例:

#include <cstdio>int main() {int num;printf("请输入一个整数: ");scanf("%d", &num);printf("您输入的整数是: %d\n", num);double floatingNum;printf("请输入一个浮点数: ");scanf("%lf", &floatingNum);printf("您输入的浮点数是: %.2f\n", floatingNum);return 0;
}

在这个示例中,首先使用 printf 输出提示信息,然后使用 scanf 从用户输入中读取数据。读取整数时,使用 %d 格式符,并通过 & 操作符将变量的地址传递给 scanf;读取浮点数时,使用 %lf 格式符,同样需要使用 & 操作符来传递变量地址。使用 printf 将读取到的数据格式化输出到屏幕上。注意,在输出浮点数时,我们使用了 %.2f 的格式控制,限制只显示两位小数。

文件输入输出

C++中使用文件输入输出需要包含<fstream>头文件,常用的类包括ifstream(输入文件流)和ofstream(输出文件流)。可以使用它们来打开文件、读写文件、关闭文件——open、read、write和close函数等。)等操作。下面是一个将一个文件的内容复制到另一个文件中的示例代码:

#include <fstream>
#include <iostream>int main() {std::ifstream fin("input.txt"); // 打开输入文件std::ofstream fout("output.txt"); // 打开输出文件int n;while (fin >> n) { // 从输入文件读入整数并写入到输出文件fout << n << " ";}fin.close(); // 关闭输入文件fout.close(); // 关闭输出文件return 0;
}

C++的<iomanip>头文件格式化输入输出功能

<iomanip>头文件常用于控制标准输出流的格式,例如设置输出浮点数时的位数、调整对齐方式、设置填充字符等等。【https://en.cppreference.com/w/cpp/header/iomanip 或 https://cplusplus.com/reference/iomanip/ 】

常用的函数和类包括:

setiosflags:设置指定的格式标志,可以通过位或运算符(|)组合多个标志。

resetiosflags:重置指定的格式标志。

setbase:设置整数输出的进制基数,如二进制、十进制、八进制或十六进制。

setfill:设置填充字符,用于在字段宽度不足时填充空白位置。

setprecision:设置浮点数输出的小数点后的精度。

setw:设置字段的宽度,影响输出时各个字段之间的间距。

get_money:从输入流中获取一个货币值。

put_money:将一个货币值写入输出流。

get_time:从输入流中获取日期和时间。

put_time:将日期和时间写入输出流。

下面是示例程序:

#include <iostream>
#include <iomanip>  // 必须引入此头文件才能使用格式控制符int main() {int i = 123;double d = 3.14159265359;std::string str = "Hello world!";// 设置输出浮点数精度为三位小数std::cout << std::fixed << std::setprecision(3);// 输出浮点数,如果小数位不足三位则自动补零std::cout << "d = " << d << std::endl;// 设置输出宽度为10个字符,不足则以0填充std::cout << std::setw(10) << std::setfill('0') << i << std::endl;// 设置输出宽度为20个字符,右对齐,左边用空格填充std::cout << std::setw(20) << std::left << str << std::endl;// 设置输出方式为科学计数法,保留五位小数std::cout << std::scientific << std::setprecision(5) << d << std::endl;return 0;
}

输出结果:

d = 3.142
0000000123
Hello world!
3.14159e+00

解释:

std::fixed和std::scientific用于控制输出浮点数的显示格式,分别代表固定小数点显示和科学计数法显示。

std::setprecision(n)用于设置浮点数精度,在fixed或scientific模式下,会控制小数点后保留的位数。

std::setw(n)和std::setfill(c)用于设置输出宽度和填充字符,宽度指定了输出数据的总位数,不足宽度的地方会自动用填充字符填充。必须同时使用这两个函数才能生效。

std::left和std::right用于设置输出对齐方式,左对齐和右对齐。默认是右对齐。

C++语言之输入输出深入介绍https://blog.csdn.net/cnds123/article/details/126358415

c++验证用户输入合法性的示例代码https://blog.csdn.net/cnds123/article/details/130322634

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

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

相关文章

免费商用 Meta 发布开源大语言模型 Llama 2

Meta 和微软深度合作&#xff0c;正式推出下一代开源大语言模型 Llama 2&#xff0c;并宣布免费提供给研究和商业使用。 Llama 2 论文地址&#xff1a;Llama 2: Open Foundation and Fine-Tuned Chat Models 据介绍&#xff0c;相比于 Llama 1&#xff0c;Llama 2 的训练数据多…

AD21 PCB设计的高级应用(九)3D PDF的输出

&#xff08;九&#xff09;3D PDF的输出 1.3D PDF的输出2.制作PCB 3D视频 1.3D PDF的输出 Altium Designer 19 带有 3D输出功能,能够直接将 PCB 的 3D效果输出到 PDF 中。 ’(1)打开带有 3D 模型的 PCB 文件,执行菜单栏中“文件”→“导出”→“PDF3D”命令&#xff0c;选择…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系&#xff1a; 实验&#xff1a;编写一个扫描脚本&#xff0c;知道本局域网里哪些ip在使用&#xff0c;哪些没有使用&#xff1f; 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式&#xff1a; shell语言编写扫描脚本 …

【Linux】自动化构建工具-make/Makefile详解

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

OpenHarmony ArkUI 如何调用相机

​ ArkUI调用相机和调用相册其实是一个思路&#xff0c;只用修改一个地方。 我们继续来说相机调用&#xff0c;ArkUI没办法自己获取相机&#xff0c;所以得依靠一下ohos.multimedia.camera 相机开发指导 介绍 本指导主要展示了调用相机的调用过程&#xff0c;以及调用相机的…

Unity Shader - if 和 keyword 的指令比较

文章目录 环境TestingIf4Sampleunity shaderlab 中的 TestingIf4Sample.shadergraphics analyzer 中的 TestingIf4Sample.glsl TestingKW4Sampleunity shaderlab 中的 TestingKW4Sample.shadergraphics analyzer 中的 TestingKW4Sample.glsl 比较 环境 Unity : 2020.3.37f1 Pi…

网络安全(零基础)自学

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…

新的恶意软件 WikiLoader 针对意大利组织

研究人员发现了一种新的恶意软件&#xff0c;名为 WikiLoader 恶意软件。之所以这样命名&#xff0c;是因为它向维基百科发出请求&#xff0c;希望得到内容中包含 "The Free "字符串的响应。 WikiLoader 恶意软件的主要目标是意大利企业及组织。 WikiLoader 是一种…

首页和图表的定制

首页就是刚刚那些在静态资源扫描文件下叫 index.html 的文件 头像

wolfSSL5.6.3 虚拟机ubuntu下编译运行记录(踩坑填坑)

网上相关教程很多(包括wolfSSL提供的手册上也是如此大而化之的描述)&#xff0c;大多类似如下步骤&#xff1a; ./configure //如果有特殊的要求的话可以在后面接上对应的语句&#xff0c;比如安装目录、打开或关闭哪些功能等等 make make install 然后结束&#xff0c;大体…

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外&#xff0c;最近的研究成果还结合了文本模式来提高性能。添加文本模态后&#xff0c;通用检测算法的一些非常好的属性开始出现&#xff0c;例如&#xff1a; 可以利用大量…

UniPro助力金融企业数字化转型 强化项目协作与跟踪

根据一份来自Standish Group的研究报告&#xff08;"CHAOS Report"&#xff09;&#xff0c;该报告对美国各行业的项目进行了调查&#xff0c;结果显示仅有不到一半&#xff08;约44%&#xff09;的项目能够成功按时完成&#xff0c;并达到预期的业务目标。其中&…

短视频矩阵营销系统技术开发者开发笔记分享

一、开发短视频seo抖音矩阵系统需要遵循以下步骤&#xff1a; 1. 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 2. 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的…

【uniapp】【Vue3】 超简单全局自定义弹窗组件Modal

Element-Plus 自动引入&#xff0c;Icon图标不显示 //这样写是不会显示的 <el-icon size"20"><view /> </el-icon>// 应该这样写 <el-icon size"20"><i-ep-view/> </el-icon>// 或 <i-ep-view/>这个名字怎么去…

Jenkins 自动化部署实例讲解,另附安装教程!

【2023】Jenkins入门与安装_jenkins最新版本_丶重明的博客-CSDN博客 也可以结合这个互补看 前言 你平常在做自己的项目时&#xff0c;是否有过部署项目太麻烦的想法&#xff1f;如果你是单体项目&#xff0c;可能没什么感触&#xff0c;但如果你是微服务项目&#xff0c;相…

改进的智能优化算法定性分析:收敛行为分析(Analysis of the convergence behavior )

目录 一、智能优化算法改进收敛行为分析运行结果 二、收敛性分析 三、GWO1在F1收敛性运行结果 四、改进灰狼算法GWO1 五、代码获取 一、智能优化算法改进收敛行为分析运行结果 本文以改进的灰狼算法 GWO1 为例&#xff0c;在 CEC2005 测试函数上进行定性分析实验。 F1:…

SpringBoot之Actuator基本使用

SpringBoot之Actuator基本使用 引入分类常用接口含义healthbeansconditionsheapdumpmappingsthreaddumploggersmetrics 引入 <!-- actuator start--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

大麦订单生成器 大麦订单购买截图生成

后台一键生成链接&#xff0c;独立后台管理 教程&#xff1a;修改数据库config/Conn.php 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

企业邮箱费用详解!了解企业邮箱的费用及其相关信息

对于需要可靠的邮箱平台的企业来说&#xff0c;企业邮箱可能是最好的解决方案。有许多供应商提供企业邮箱服务&#xff0c;他们通常每月都有相应的费用。 在考虑企业邮箱的成本时&#xff0c;有几件事要记住。首先&#xff0c;您应该考虑使用邮箱服务的用户数量&#xff0c;因为…

✅1本期刊发生变动,EI期刊目录更新!

【SciencePub学术】继上次更新后一个月&#xff0c;爱思唯尔&#xff08;Elsevier&#xff09;官网更新了EI Compendex收录期刊目录。本次更新EI期刊目录中&#xff0c;Serials&#xff08;连续出版/核心收录&#xff09;列表共收录期刊名称5347个&#xff0c;与上次更新相比&a…