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

news2024/12/23 4:54:50

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.coloradmin.cn/o/828137.html

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

相关文章

算法与数据结构(五)--树【1】树与二叉树是什么

一.树的定义 树是一个具有层次结构的集合&#xff0c;是由一个有限集和集合上定义的一种层次结构关系构成的。不同于线性表&#xff0c;树并不是线性的&#xff0c;而是有分支的。 树&#xff08;Tree&#xff09;是n&#xff08;n>0&#xff09;个结点的有限集。 若n0&…

改变C++中私有变量成员的值

1、没有引用的情况&#xff1a; #include <iostream> #include <queue> using namespace std; class Person { public:queue<int>que; public:queue<int> getQueue(){return que;}void push(int a){que.push(a);}void pop(){que.pop();} };int main()…

RS232自由转Profinet网关扫码枪连接电脑操作

你是否曾经遇到过这样的问题&#xff1a;如何在不编写复杂代码的情况下&#xff0c;将条形码数据上传到PLC&#xff1f;今天&#xff0c;我们将为你揭示一个简单的解决方案&#xff01; 让我们来看看这个神奇的组合&#xff1a;捷米的JM-RS485/232-PN (rs232转Profient网关)和…

背景图片及精灵图

.picture {width: 48px;height: 48px;background-image: url(../images/精灵图-侧边功能.png); }为一个有宽高的div设置了背景图片&#xff0c;背景图片只作用在div的content区域内&#xff0c;不作用在padding和border上。 知识点&#xff1a; 背景图使用精灵图&#xff08;…

13-5_Qt 5.9 C++开发指南_基于信号量的线程同步_Semaphore

文章目录 1. 信号量的原理2. 双缓冲区数据采集和读取线程类设计3. QThreadDAQ和QThreadShow 的使用4. 源码4.1 可视化UI设计框架4.2 qmythread.h4.3 qmythread.cpp4.4 dialog.h4.5 dialog.cpp 1. 信号量的原理 信号量(Semaphore)是另一种限制对共享资源进行访问的线程同步机制…

2023年8月美团外卖3-18元红包优惠券天天领取活动日历及美团外卖红包领取使用

2023年8月美团外卖3-18元红包天天领取活动日历 根据上图美团外卖红包领取活动时间表以下时间可以天天领取3-18元美团外卖红包优惠券&#xff1a; 1、2023年8月18日 可领取美团外卖18元神券节红包&#xff1b; 2、2023年8月每周六、周日每天可领取12元美团外卖节红包&#xff…

聊聊工程化 Docker 的最新趋势以及最佳实践

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

AI绘画大师,轻松塑造绝美画作!

前言 随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐渗透到各个领域&#xff0c;艺术也不例外。AI绘 画大师&#xff0c;即 AI 绘画 API&#xff0c;作为其中的一颗明珠&#xff0c;正在引领着艺术创作的革命&#xff0c;它为创作者和艺术爱好者带来…

docker容器创建私有仓库(第三篇)

目录 六、创建私有仓库 七、Docker资源限制 7.1、CPU使用率 7.2、CPU共享比例 7.3、CPU周期限制 7.4、CPU核心限制 7.5、CPU 配额控制参数的混合案例 7.6、内存限制 7.7、Block IO 的限制 7.8、限制bps 和iops 8、Docker数据持久化 8.1、数据持久化介绍 8.2、Volum…

python制作超炫流星雨表白,python好看的流星雨代码

大家好&#xff0c;本文将围绕python制作超炫流星雨表白展开说明&#xff0c;python好看的流星雨代码是一个很多人都想弄明白的事情&#xff0c;想搞清楚html流星雨代码可复制需要先了解以下几个事情。 本文讲述了Python代码示例&#xff1a;实现流星雨特效&#xff01;具有很好…

使用 GitHub Copilot 进行 Prompt Engineering 的初学者指南(译)

文章目录 什么是 GitHub Copilot ?GitHub Copilot 可以自己编码吗&#xff1f;GitHub Copilot 的底层是如何工作的&#xff1f;什么是 prompt engineering?这是 prompt engineering 的另一个例子 使用 GitHub Copilot 进行 prompt engineering 的最佳实践提供高级上下文&…

KepwareEX配置API REST接口

服务端Kepware设置 API允许连接设置 创建通道 请求地址(POST)&#xff1a; https://<主机名_或_ip>:<端口>/config/v1/project/channels 以下示例使用postman工具访问API创建了一个名为Channel1 的通道&#xff0c;其使用在本地主机运行的服务器中的Simulator …

【LeetCode】剑指 Offer Ⅱ 第2章:数组(8道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 题目解决方案剑指 Offer II 006. 排序数组中两个数字之和双指针&#xff08;异向&#xff09; ⭐剑指 Offer II 007. 数组中和为 0 的三个数排序 双指针&#xff08;异向&#xff09; ⭐剑指 Offer II 008. 和…

应用在心率血氧健康监测耳机中的三合一灯珠

随着生活节奏的加快&#xff0c;工作压力的加大&#xff0c;越来越多的人开始注重健身&#xff0c;如此一来&#xff0c;可穿戴健身追踪设备就变得很流行。通过对脉搏血氧测量原理的研究&#xff0c;人们已经发现只要测量出两种波长的透射光在一个完整的脉搏波中光强度的变化量…

面试必考精华版Leetcode328. 奇偶链表

题目&#xff1a; 代码(首刷看解析 day22&#xff09;&#xff1a; class Solution { public:ListNode* oddEvenList(ListNode* head) {if(headnullptr) return nullptr;ListNode* oddhead;ListNode* evenHeadhead->next;;ListNode* evenevenHead;while(even!nullptr&&…

华为OD机试真题 Java 实现【N进制减法】【2023 B卷 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 …

flask中实现restful-api

flask中实现restful-api 举例&#xff0c;我们可以创建一个用于管理任务&#xff08;Task&#xff09;的API。在这个例子中&#xff0c;我们将有以下API&#xff1a; GET /tasks: 获取所有任务POST /tasks: 创建一个新的任务GET /tasks/<id>: 获取一个任务的详情PUT /t…

加速产品开发周期:PDM系统的设计流程优化

加速产品开发周期&#xff1a;PDM系统的设计流程优化 在现代商业竞争日益激烈的背景下&#xff0c;企业迫切需要加速产品开发周期&#xff0c;快速推向市场&#xff0c;抢占先机。PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;作为一个高效…

Android系统源码 目录结构

前言&#xff1a;Android官方在线看源码地址 https://cs.android.com/ 1.Android系统架构 Android系统架构分为五层&#xff0c;从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。 AOSP 架构 AOSP 的软件堆栈包含以下层&#xff1a; 图 1. AOSP …

【PCB专题】案例:Allegro如何在PCB板上直接修改封装中的特定焊盘

在实际产品设计中我们很可能因为结构、封装的制约而将两个器件放的很近。并且也可能因为是接口器件,所以要求上锡量要多。 但是因为成本的原因我们很可能不会去为了几个器件增加钢网的阶数,以求获得更多的锡量,让PIN脚爬锡更好。而会通过扩大钢网开口的形式来增加锡量。 如…