C++重新入门-基本输入输出

C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作

I/O 库头文件

C++ 中用于输入输出(I/O)的库头文件主要包括 <iostream><fstream><iomanip> 等。以下是这些头文件的简要介绍:

  1. <iostream>

    • 提供了用于控制台输入输出的基本功能,如 std::coutstd::cin
    • 包含了标准流对象 std::cin(标准输入)、std::cout(标准输出)、std::cerr(标准错误输出)和 std::clog(标准日志输出)。
    • 还包含了一些基本的输入输出操作符,如 <<>>
  2. <fstream>

    • 提供了文件输入输出的功能。
    • 包含了用于文件读写的类,如 std::ifstream(用于文件输入)、std::ofstream(用于文件输出)和 std::fstream(用于文件读写)。
    • 通过这些类,可以打开文件、读取文件内容、写入文件内容等操作。
  3. <iomanip>

    • 提供了用于格式化输出的功能。
    • 包含了 std::setwstd::setprecisionstd::setfill 等函数,可以用来设置输出的字段宽度、精度、填充字符等格式。
    • 通常用于美化输出结果,使其更易读。

这些头文件提供了 C++ 中常用的输入输出功能,可以满足大多数程序的基本需求。需要注意的是,在使用这些头文件时,需要包含相应的标准命名空间 std,或者使用 using namespace std; 语句将其引入当前命名空间,以便直接使用标准库中的对象和函数。

 标准输出流(cout)

标准输出流 cout 是 C++ 中用于向标准输出设备(通常是控制台)输出数据的流对象。它是 <iostream> 头文件中的一个类对象,位于 std 命名空间下。

使用 cout 可以将数据输出到控制台,这在程序调试、交互和展示信息时非常有用。下面是一些使用 cout 的基本示例:

#include <iostream>int main() {// 输出字符串std::cout << "Hello, world!" << std::endl;// 输出整数int num = 10;std::cout << "The value of num is: " << num << std::endl;// 输出浮点数double pi = 3.14159;std::cout << "The value of pi is: " << pi << std::endl;// 输出多个值int a = 5, b = 7;std::cout << "a = " << a << ", b = " << b << std::endl;return 0;
}

上述示例中,cout 使用了插入运算符 << 来将数据插入输出流中。<< 运算符的左侧是 cout 对象,右侧是要输出的数据。可以连续使用多个 << 运算符来输出多个值。

需要注意的是,在每次输出结束后,建议使用 std::endl 来输出一个换行符,以确保输出及时刷新到输出设备。此外,endl 还会刷新输出缓冲区,确保数据立即显示在屏幕上。

另外,为了减少代码中的冗长,可以使用 using namespace std;std 命名空间引入当前命名空间,这样就可以直接使用 cout 而不必在其前面加上 std:: 前缀。

#include <iostream>
using namespace std;int main() {cout << "Hello, world!" << endl;return 0;
}

cout 在 C++ 程序中是非常常用的,它提供了一种方便的方式来输出各种类型的数据,对于调试和交互来说尤其有用。

标准输入流(cin)

标准输入流 cin 是 C++ 中用于从标准输入设备(通常是键盘)接收输入数据的流对象。它也是 <iostream> 头文件中的一个类对象,位于 std 命名空间下。

使用 cin 可以从控制台获取用户的输入,并将其存储到相应的变量中。下面是一个简单的示例:

 

#include <iostream>int main() {int num;std::cout << "Please enter an integer: ";std::cin >> num;std::cout << "You entered: " << num << std::endl;return 0;
}

在这个示例中,cin 使用了提取运算符 >> 来从输入流中提取数据,并将其存储到变量 num 中。用户输入的值会被赋给 num,然后通过 cout 输出到控制台。

需要注意的是,cin 会等待用户输入,并且输入的数据必须与变量的类型匹配,否则可能导致意外结果或错误。例如,如果用户输入的内容无法转换为整数,则会导致 cin 失败,而程序可能会进入错误状态。

为了防止程序陷入死循环等问题,可以在读取输入之前使用 cin 的成员函数 cin.clear() 来清除输入流的错误状态,以及 cin.ignore() 来清除输入缓冲区中的残留数据。

另外,可以通过使用 std::getline() 函数来读取一行完整的字符串,而不仅仅是一个单词或一个数字。

#include <iostream>
#include <string>int main() {std::string name;std::cout << "Please enter your name: ";std::getline(std::cin, name);std::cout << "Hello, " << name << "!" << std::endl;return 0;
}

cin 提供了一种方便的方式来获取用户的输入,使得程序可以与用户进行交互,接收用户输入的数据,并据此执行相应的操作。

标准错误流(cerr)

标准错误流 cerr 是 C++ 中用于向标准错误设备(通常是控制台)输出错误信息的流对象。它也是 <iostream> 头文件中的一个类对象,位于 std 命名空间下。

cout 类似,cerr 也是一个输出流,但它通常用于输出程序的错误消息、异常信息等。与 cout 不同的是,cerr 不会被缓冲,即使在输出之后,错误消息也会立即显示在控制台上。这有助于在程序发生错误时及时地将错误信息显示给用户,而不必等待缓冲区被刷新。

下面是一个简单的示例,演示如何使用 cerr 输出错误消息:

#include <iostream>int main() {int dividend = 10;int divisor = 0;if (divisor == 0) {std::cerr << "Error: Cannot divide by zero!" << std::endl;return 1; // 返回非零值表示程序发生错误}double result = dividend / divisor;std::cout << "Result: " << result << std::endl;return 0;
}

在这个示例中,如果除数 divisor 的值为零,那么程序会输出错误消息到标准错误流 cerr,然后返回一个非零值,表示程序发生了错误。否则,程序会正常执行除法操作并输出结果到标准输出流 cout

使用 cerr 可以帮助开发者及时发现和定位程序中的错误,提高程序的可靠性和稳定性。通常,cerr 用于输出关键的错误信息,而 cout 用于输出一般性的信息和结果。

标准日志流(clog)

标准日志流 clogcerrcout 类似,是 C++ 中的一个输出流对象,用于输出程序的日志信息。它也是 <iostream> 头文件中的一个类对象,位于 std 命名空间下。

clog 通常用于输出程序的一般性日志信息,不像 cerr 那样用于输出关键的错误信息。与 cout 相比,clog 具有与 cerr 相似的特性,但与 cerr 不同的是,clog 使用了缓冲区,因此输出的日志信息会在缓冲区满或遇到换行符时才会刷新到目标设备(通常是控制台)。

下面是一个简单的示例,演示如何使用 clog 输出日志信息:

#include <iostream>int main() {int x = 10;// 输出日志信息std::clog << "Starting program..." << std::endl;std::clog << "The value of x is: " << x << std::endl;// 模拟日志记录for (int i = 0; i < 5; ++i) {std::clog << "Processing iteration " << i << "..." << std::endl;}std::clog << "Program completed." << std::endl;return 0;
}

在这个示例中,clog 被用于输出程序的运行日志信息,例如程序的启动、变量的值、循环迭代等。与 cout 类似,clog 使用插入运算符 << 将数据插入输出流中,并且可以与 endl 一起使用来刷新输出缓冲区并输出换行符。

总的来说,clog 是用于输出程序的一般性日志信息的输出流对象,与 cerrcout 一样,它提供了一种方便的方式来记录程序的运行状态和输出调试信息。

总的来说,C++ 中的标准输出流有三种:coutcerrclog,它们分别有着不同的特点和用途:

  1. cout

    • 用于一般性的输出,如程序的运行结果、用户提示信息等。
    • 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
    • 适合用于一般性的输出场景,不需要立即显示的情况下使用。
  2. cerr

    • 用于输出关键的错误信息、异常信息等。
    • 不使用缓冲区,输出数据会立即显示在目标设备上,即使在其他输出之后。
    • 通常用于输出程序的错误消息,或者需要立即显示的情况下使用。
  3. clog

    • 用于输出程序的一般性日志信息。
    • 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
    • 通常用于输出程序的运行状态、调试信息等。

总的来说,根据输出的内容和要求,可以选择合适的输出流对象进行输出。对于关键的错误信息和异常信息,应该使用 cerr;对于一般性的输出和日志信息,可以使用 coutclog

 

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

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

相关文章

如何计算非线性相关系数

Python中没有提供计算两组变量非线性相关系数的包或接口。x和x^2的皮尔森相关系数可能接近于0&#xff0c;因为求的是线性相关性。但是这两个变量并不是独立不相关的。使用距离相关系数就可以计算x和x^2的非线性关系&#xff0c;如果距离相关系数接近于0&#xff0c;就可以说两…

AtCoder Beginner Contest 340 C - Divide and Divide【打表推公式】

原题链接&#xff1a;https://atcoder.jp/contests/abc340/tasks/abc340_c Time Limit: 2 sec / Memory Limit: 1024 MB Score: 300 points 问题陈述 黑板上写着一个整数 N。 高桥将重复下面的一系列操作&#xff0c;直到所有不小于2的整数都从黑板上移除&#xff1a; 选择…

二、DataX安装

DataX安装 一、简介二、系统要求三、部署 一、简介 官方地址&#xff1a;https://github.com/alibaba/DataX/blob/master/userGuid.md 二、系统要求 LinuxJDK(1.8以上&#xff0c;推荐1.8) Centos7.9的java1.8安装命令&#xff1a;yum install java-1.8.0-openjdk.x86_64 Py…

Git分支和迭代流程

Git分支 feature分支&#xff1a;功能分支 dev分支&#xff1a;开发分支 test分支&#xff1a;测试分支 master分支&#xff1a;生产环境分支 hotfix分支&#xff1a;bug修复分支。从master拉取&#xff0c;修复并测试完成merge回master和dev。 某些团队可能还会有 reale…

2024/2/13

数组练习 1、选择题 1.1、若有定义语句&#xff1a;int a[3][6]; &#xff0c;按在内存中的存放顺序&#xff0c;a 数组的第10个元素是 D A&#xff09;a[0][4] B) a[1][3] C)a[0][3] D)a[1][4] 1.2、有数组 int a[5] {10&#xff0c;20&#xff0c;30&#xff0c;40&…

孙悟空吃蟠桃 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 孙悟空爱吃蟠桃&#xff0c;有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵蟠桃树&#xff0c;每棵树上都桃子&#xff0c;守卫将在 H 小时后回来。 孙悟空…

华为数通方向HCIP-DataCom H12-821题库(单选题:441-460)

第441题 下面是一台路由输出的信息,关于这段信息描述正确的是 <R1>display bgp peerBGP local router ID : 2.2.2.2Local AS number : 100Total number of peers : 2 Peers in established state : 0Peer V AS MsgRcvd MsgSent OutQ Up/Down …

Mysql基本函数

系统函数 version()--mysql版本 user()--数据库用户名 database()--数据库名 datadir--数据库路径 version_compile_os--操作系统版本 hostname--当前机器的机器名 Schema()——当前数据库 字符串连接函数 concat(str1,str2,…)--没有分隔符地连接字符串 concat_ws(separator…

Java:什么是向上转型与向下转型(详细图解)

目录 一、什么是向上转型 1、概念 2、代码示例 3、向上转型的优缺点 二、什么是向下转型 1、向下转型的概念 ​编辑 2、代码示例 三、向下转型的缺点及 instanceof 的使用 1、向下转型的缺点 2、instanceof的使用 一、什么是向上转型 1、概念 向上转型就是创建一个…

Java并发基础:PriorityBlockingQueue全面解析!

内容概要 PriorityBlockingQueue类能高效处理优先级任务&#xff0c;确保高优先级任务优先执行&#xff0c;它内部基于优先级堆实现&#xff0c;保证了元素的有序性&#xff0c;同时&#xff0c;作为BlockingQueue接口的实现&#xff0c;它提供了线程安全的队列操作&#xff0…

人类知识的分类

根据休谟的理论&#xff0c;人类知识可以分为两个范畴&#xff1a;先验范畴和经验范畴。 先验范畴指的是那些不依赖于经验或感官观察而能够获得的知识。这些知识是基于我们的理性和思维能力而得出的&#xff0c;它们不需要通过直接观察或实验来验证。休谟认为&#xff0c;先验范…

C/C++内存管理:new、delete功能及原理实现

目录 一、C/C内存分布 二、C中内存管理方式 2.1new/delete操作内置类型 2.2 new和delete操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 4.1内置类型 4.2自定义类型 五、定位new 一、C/C内存分布 int globalVar 1; static int sta…

阅读 - 搭建博客

搭建博客的几种方式 1. 使用在线的博客系统&#xff0c;如语雀、掘金、CSDN等。 优点&#xff1a;直接创建账号使用即可&#xff0c;简单方便&#xff0c;不需要维护 缺点&#xff1a;文章分散在各个平台&#xff0c;不易于管理 2. github pages hugo、hexo等静态博客系统…

springboot/ssm学生信息管理系统Java学生在线选课考试管理系统

springboot/ssm学生信息管理系统Java学生在线选课考试管理系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.…

【docker 的常用命令——详细讲解】

docker 的常用命令 1. 介绍2. 基本管理命令3. 文件和数据传输4. Docker Compose 命令&#xff08;用于多容器应用&#xff09; 1. 介绍 Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用程序及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流…

MATLAB知识点:fibonacci函数(★☆☆☆☆)返回斐波那契数列

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章&#xff1a;课后习题讲解中拓展的函数 在讲解第…

javaScript实现客户端直连AWS S3(亚马逊云)文件上传、断点续传、断网重传

写在前面&#xff1a;在做这个调研时我遇到的需求是前端直接对接亚马逊平台实现文件上传功能。上传视频文件通常十几个G、客户工作环境网络较差KB/s&#xff0c;且保证上传是稳定的&#xff0c;支持网络异常断点重试、文件断开支持二次拖入自动重传等。综合考虑使用的Aws S3的分…

01 前言

目录 什么是CC发展史C的重要性如何学习C关于本专栏 1. 什么是c C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20…

java实现多级目录树(递归实现)

一.应用场景 有时候需要我们后台给前台传树结构的数据&#xff0c;要怎么查询? 怎么返回数据呢&#xff1f; 二.数据库表设计以及数据内容(以部门举例) id 主键 parent_id 父级部门id depart_name 部门名词 sort 部门排序三.实体类 Data public…

线性判别分析(LDA)

一、说明 LDA 是一种监督降维和分类技术。其主要目的是查找最能分隔数据集中两个或多个类的特征的线性组合。LDA 的主要目标是找到一个较低维度的子空间&#xff0c;该子空间可以最大限度地区分不同类别&#xff0c;同时保留与歧视相关的信息。 LDA 是受监督的&#xff0c;这意…