当前位置: 首页 > news >正文

C++入门教程||C++ 基本的输入输出||C++ 数据结构

C++ 基本的输入输出

C++ 基本的输入输出

C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。

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

I/O 库头文件

下列的头文件在 C++ 编程中很重要。

头文件函数和描述
<iostream>该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
<iomanip>该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。
<fstream>该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。

标准输出流(cout)

预定义的对象 cout 是 ostream 类的一个实例。cout 对象"连接"到标准输出设备,通常是显示屏。cout是与流插入运算符 << 结合使用的,如下所示:

#include <iostream>
using namespace std;int main( ){char str[] = "Hello C++";cout << "Value of str is : " << str << endl; 
} 

当上面的代码被编译和执行时,它会产生下列结果:

Value of str is : Hello C++

C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。<< 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项。

流插入运算符 << 在一个语句中可以多次使用,如上面实例中所示,endl 用于在行末添加一个换行符。

标准输入流(cin)

预定义的对象 cin 是 istream 类的一个实例。cin 对象附属到标准输入设备,通常是键盘。cin 是与流提取运算符 >> 结合使用的,如下所示:

#include <iostream>
using namespace std;int main(){char name[50];cout << "请输入您的名称: ";cin >> name;cout << "您的名称是: " << name << endl;   
} 

当上面的代码被编译和执行时,它会提示用户输入名称。当用户输入一个值,并按回车键,就会看到下列结果:

请输入您的名称: cplusplus
您的名称是: cplusplus

C++ 编译器根据要输入值的数据类型,选择合适的流提取运算符来提取值,并把它存储在给定的变量中。

流提取运算符 >> 在一个语句中可以多次使用,如果要求输入多个数据,可以使用如下语句:

cin >> name >> age;

这相当于下面两个语句:

cin >> name;
cin >> age;

标准错误流(cerr)

预定义的对象 cerr 是 ostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出。

cerr 也是与流插入运算符 << 结合使用的,如下所示:

#include <iostream>
using namespace std;int main(){char str[] = "Unable to read....";cerr << "Error message : " << str << endl; 
} 

当上面的代码被编译和执行时,它会产生下列结果:

Error message : Unable to read....

标准日志流(clog)

预定义的对象 clog 是 ostream 类的一个实例。clog 对象附属到标准错误设备,通常也是显示屏,但是 clog 对象是缓冲的。这意味着每个流插入到 clog 都会先存储在缓冲区中,直到缓冲填满或者缓冲区刷新时才会输出。

clog 也是与流插入运算符 << 结合使用的,如下所示:

#include <iostream>
using namespace std;int main(){char str[] = "Unable to read....";clog << "Error message : " << str << endl;
} 

当上面的代码被编译和执行时,它会产生下列结果:

Error message : Unable to read....

通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

C++ 数据结构

C++ 数据结构

C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:

  • Title
  • Author
  • Subject
  • Book ID

定义结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct [structure tag]{member definition;member definition;...member definition;
}[one or more structure variables];  

structure tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明 Book 结构的方式:

struct Books{char title[50];char author[50];char subject[100];int book_id;
}book; 

访问结构成员

为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用 struct 关键字来定义结构类型的变量。下面的实例演示了结构的用法:

#include <iostream>
#include <cstring>using namespace std;struct Books{char title[50];char author[50];char subject[100];int book_id;
};int main(){struct Books Book1;        // 声明 Book1,类型为 Bookstruct Books Book2;        // 声明 Book2,类型为 Book// Book1 详述strcpy( Book1.title, "Learn C++ Programming");strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming");Book1.book_id = 6495407;// Book2 详述strcpy( Book2.title, "Telecom Billing");strcpy( Book2.author, "Yakit Singha");strcpy( Book2.subject, "Telecom");Book2.book_id = 6495700;// 输出 Book1 信息cout << "Book 1 title : " << Book1.title <<endl;cout << "Book 1 author : " << Book1.author <<endl;cout << "Book 1 subject : " << Book1.subject <<endl;cout << "Book 1 id : " << Book1.book_id <<endl;// 输出 Book2 信息cout << "Book 2 title : " << Book2.title <<endl;cout << "Book 2 author : " << Book2.author <<endl;cout << "Book 2 subject : " << Book2.subject <<endl;cout << "Book 2 id : " << Book2.book_id <<endl;return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700

结构作为函数参数

您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:

#include <iostream>
#include <cstring>using namespace std;
void printBook( struct Books book );struct Books{char title[50];char author[50];char subject[100];int book_id;
};int main(){struct Books Book1;        // 声明 Book1,类型为 Bookstruct Books Book2;        // 声明 Book2,类型为 Book// Book1 详述strcpy( Book1.title, "Learn C++ Programming");strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming");Book1.book_id = 6495407;// Book2 详述strcpy( Book2.title, "Telecom Billing");strcpy( Book2.author, "Yakit Singha");strcpy( Book2.subject, "Telecom");Book2.book_id = 6495700;// 输出 Book1 信息printBook( Book1 );// 输出 Book2 信息printBook( Book2 );return 0;
}
void printBook( struct Books book ){cout << "Book title : " << book.title <<endl;cout << "Book author : " << book.author <<endl;cout << "Book subject : " << book.subject <<endl;cout << "Book id : " << book.book_id <<endl;
}

当上面的代码被编译和执行时,它会产生下列结果:

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

指向结构的指针

您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

struct Books *struct_pointer;

现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:

struct_pointer = &Book1;

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:

struct_pointer->title;

让我们使用结构指针来重写上面的实例,这将有助于您理解结构指针的概念:

#include <iostream>
#include <cstring>using namespace std;
void printBook( struct Books *book );struct Books
{char  title[50];char  author[50];char  subject[100];int   book_id;
};int main( )
{struct Books Book1;        // 声明 Book1,类型为 Bookstruct Books Book2;        // 声明 Book2,类型为 Book */// Book1 详述strcpy( Book1.title, "Learn C++ Programming");strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming");Book1.book_id = 6495407;// Book2 详述strcpy( Book2.title, "Telecom Billing");strcpy( Book2.author, "Yakit Singha");strcpy( Book2.subject, "Telecom");Book2.book_id = 6495700;// 通过传 Book1 的地址来输出 Book1 信息printBook( &Book1 );// 通过传 Book2 的地址来输出 Book2 信息printBook( &Book2 );return 0;
}
// 该函数以结构指针作为参数
void printBook( struct Books *book )
{cout << "Book title : " << book->title <<endl;cout << "Book author : " << book->author <<endl;cout << "Book subject : " << book->subject <<endl;cout << "Book id : " << book->book_id <<endl;
} 

当上面的代码被编译和执行时,它会产生下列结果:

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

typedef 关键字

下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:

typedef struct
{char  title[50];char  author[50];char  subject[100];int   book_id;
}Books;

现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:

Books Book1, Book2;

您可以使用 typedef 关键字来定义非结构类型,如下所示:

typedef long int *pint32;pint32 x, y, z;

x, y 和 z 都是指向长整型 long int 的指针。

相关文章:

C++入门教程||C++ 基本的输入输出||C++ 数据结构

C 基本的输入输出 C 基本的输入输出 C 标准库提供了一组丰富的输入/输出功能&#xff0c;我们将在后续的章节进行介绍。本章将讨论 C 编程中最基本和最常见的 I/O 操作。 C 的 I/O 发生在流中&#xff0c;流是字节序列。如果字节流是从设备&#xff08;如键盘、磁盘驱动器、…...

线性表——顺序表

文章目录一&#xff1a;线性表二&#xff1a;顺序表1&#xff1a;概念与结构1&#xff1a;静态顺序表2&#xff1a;动态顺序表2&#xff1a;动态顺序表的代码实现1&#xff1a;结构2&#xff1a;接口实现1&#xff1a;初始化2&#xff1a;释放内存3&#xff1a;检查容量4&#…...

第六章 Vite4+Vue3+Vtkjs 模型颜色切换、漫反射曲面颜色

一、介绍 💥 💥 Vtk里面工具非常的齐全,但是相关的文档又少之又少,只能花大量时间去阅读源码。漫反射曲面颜色是什么意思呢,Vtk可以使用漫反射曲面颜色来模拟光线在表面反射时的颜色。漫反射是一种光线与表面发生碰撞后,被散射到各个方向的现象,这种现象可以用来解释物…...

【QT学习七】QTreeWidget

目录 一、QTreeWidget 概述 二、QTreeWidget 的基本使用 2.1、创建 QTreeWidget 控件 2.2、设置 QTreeWidget 的大小和位置 2.3、设置 QTreeWidget 的列数和列标题 2.4、添加节点 2.5、读取节点 2.6、设置节点数据 2.7、自定义节点样式 三、注意事项 四、完整示例 一…...

【Linux】组管理和权限管理

目录1 Linux组的基本介绍2 文件/目录所有者2.1 查看文件的所有者2.2 修改文件所有者3 组的创建3.1 基本指令3.2 应用实例4 文件/目录 所在组4.1 查看文件/目录所在组4.2修改文件/目录所在的组5 其他组6 改变用户所在组6.1 改变用户所在的组6.2 应用实例7 权限介绍8 rwx权限详解…...

从零到一发布 NPM 包

如果你负责前端的基础能力建设&#xff0c;发布各种功能/插件包犹如家常便饭&#xff0c;所以熟悉对 npm 包的发布与管理是非常有必要的&#xff0c;故此有了本篇总结文章。本篇文章一方面总结&#xff0c;一方面向社区贡献开箱即用的 npm 开发、编译、发布、调试模板&#xff…...

uniapp国际化配置

1、创建资源文件 创建一个locale文件夹&#xff0c;新增index.js,en.json,zh-hans.json 2.配置locale文件夹中的index.js文件 import Vue from vue import VueI18n from vue-i18n// v8.x import en from ./en.json import zhHans from ./zh-Hans.json import zhHant from .…...

前端中 try-catch 捕获不到哪些异常和常见错误

在开发过程中&#xff0c;我们的目标是 0error&#xff0c;0warning。 但有很多因素并不是我们可控的&#xff0c;为了避免某块代码的错误&#xff0c;影响到其他模块或者整体代码的运行&#xff0c;我们经常会使用try-catch模块来主动捕获一些异常或者错误。 比如我们在获取…...

javaEE 初阶 — 如何构造一个 HTTP 请求

文章目录使用 form 表单标签构造1 构造 GET 请求2 构造 POST 请求使用 ajax 构造1 什么是异步2 代码中如何使用 ajax使用第三方工具构造1 postman 工具的安装2 postman 工具的使用使用 form 表单标签构造 1 构造 GET 请求 使用 form 表单构造 HTTP 请求&#xff0c;需要用到两…...

CentOS 7下安装PostgreSQL 15版本数据库(图文详细)

文章目录CentOS 7下安装PostgreSQL 15版本数据库(图文详细)1 简介1.1 概述1.2 官网2 PostgreSQL安装2.1 选定版本2.2 安装依赖2.3 执行安装2.4 初始化2.5 配置环境变量2.6 创建数据库2.6.1 进入命令行2.6.2 创建DB2.6.3 设置密码2.7 配置远程2.8 测试链接3 pgAdmin4工具安装3.1…...

代码随想录算法训练营第五十一天 | 309. 最佳买卖股票时机含冷冻期、714. 买卖股票的最佳时机含手续费

309. 最佳买卖股票时机含冷冻期 动规五部曲 1、确定dp数组以及下标的含义 dp[i][j]&#xff0c;第i天状态为j&#xff0c;所剩的最多现金为dp[i][j]。 具体可以区分出如下四个状态&#xff1a; 状态一&#xff1a;持有股票状态&#xff08;今天买入股票&#xff0c;或者是…...

中英文拼写检测纠正开源项目使用入门 word-checker 1.1.0

项目简介 word-checker 本项目用于单词拼写检查。支持英文单词拼写检测&#xff0c;和中文拼写检测。 特性说明 可以迅速判断当前单词是否拼写错误 可以返回最佳匹配结果 可以返回纠正匹配列表&#xff0c;支持指定返回列表的大小 错误提示支持 i18n 支持大小写、全角半角…...

面试如果还不会Netty,看这篇文章就够了

我们去面试的时候&#xff0c;经常被问到netty的题目。我整理了netty的32连问。小伙伴们&#xff0c;收藏起来慢慢看吧。 1. Netty是什么&#xff0c;它的主要特点是什么&#xff1f; Netty是一个高性能、异步事件驱动的网络编程框架&#xff0c;它基于NIO技术实现&#xff0…...

作为大学生,你还不会搭建chatGPT微应用吗?

目录 引言ChatGPT是什么&#xff1f;背景&#xff1a;ChatGPT敢为人先&#xff0c;打破全球僵局示例演示&#xff1a;基于ChatGPT微应用实现的条件及步骤&#xff08;1&#xff09;整体框架&#xff08;2&#xff09;搭建前的准备工作&#xff08;3&#xff09;实际搭建步骤&a…...

Three.js教程:第一个3D场景

推荐&#xff1a;将NSDT场景编辑器加入你3D工具链其他工具系列&#xff1a;NSDT简石数字孪生下面的代码完整展示了通过three.js引擎创建的一个三维场景&#xff0c;在场景中绘制并渲染了一个立方体的效果&#xff0c;为了大家更好的宏观了解three.js引擎&#xff0c; 尽量使用了…...

lua快速入门~在js基础上,知道Lua 和 Js 的不同即可

☺ lua 和 javaScript 差不多的&#xff0c;就是一些语法的细节不同&#xff0c;学过js&#xff0c;再注意一下下面的细节&#xff0c;就能上手了~ 快速入门&#xff0c;可以直接看一下菜鸟教程的lua&#xff1a;https://www.runoob.com/lua/lua-tutorial.html Lua 和 Js 的不同…...

Linux系统【Centos7】更换源详细教程

更换CentOS 7系统的源可以提高网络速度&#xff0c;加快软件升级和安装的速度。以下是详细的更换CentOS 7源实践。 步骤 1&#xff1a;备份原始 Yum.repo 在更换之前&#xff0c;首先要备份原始 Yum.repo 文件&#xff08;一定要记得备份&#xff09;。 bash sudo mv /etc/y…...

金三银四求职季来了!分享几道最常见的app面试题,帮助您更好准备面试求职!

目录&#xff1a;导读 引言 一、Web 端测试和 App 端测试有何不同? 二、App是如何测试的&#xff1f; 三、app闪退的可能原因&#xff1f; 四、给你一个登录页面,你要如何测试&#xff1f; 五、测试过程中遇到app出现crash或者ANR&#xff0c;你会怎么处理&#xff1f; …...

Java集合——List接口学习总结

一、ArrayList实现类 1. 常用方法 增加&#xff1a;add(int index, E element)删除&#xff1a;remove(int index) remove(Object o)修改&#xff1a;set(int index, E element)查看&#xff1a;get(int index)判断&#xff1a;常用遍历方式&#xff1a;//List集合 遍历&…...

低代码(三)低代码平台前端技术组件选型1.0(前端)

目前国内主流的低代码开发平台有&#xff1a;金蝶、用友、宜搭、云程、简道云、明道云、氚云、伙伴云、道一云、JEPaaS、华炎魔方、搭搭云、JeecgBoot 、RuoYi等。这些平台各有优劣势&#xff0c;定位也不同&#xff0c;用户可以根据自己需求选择。如果企业想自主可控&#xff…...

从PyAutoGUI到OpenClaw:构建健壮桌面自动化的状态驱动技能库

1. 项目概述&#xff1a;当自动化脚本拥有“鹰爪”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫Ikaros-521/openclaw-pyautogui-skill。光看名字&#xff0c;就透着一股“硬核”和“实用”的气息。Ikaros&#xff08;伊卡洛斯&#xff09;是希腊神话里那位用蜡和羽毛造…...

单例模式深度解析:从基础实现到生产级避坑指南

1. 单例模式&#xff1a;为什么它既是基石又是“坑”在软件开发的江湖里&#xff0c;单例模式&#xff08;Singleton Pattern&#xff09;的名号&#xff0c;几乎无人不知。它被写进教科书&#xff0c;是设计模式中最容易理解、也最常被提及的模式之一。但有趣的是&#xff0c;…...

开源可观测性平台SigNoz:一体化监控与分布式链路追踪实战

1. 项目概述&#xff1a;从可观测性痛点出发&#xff0c;为什么我们需要SigNoz在云原生和微服务架构成为主流的今天&#xff0c;一个应用可能由数十甚至上百个服务组成&#xff0c;它们分布在不同的容器、节点甚至云区域中。当用户反馈“页面加载慢”或“功能报错”时&#xff…...

大模型长对话记忆难题:LightMem轻量记忆系统原理与实战

1. 项目概述&#xff1a;当大模型遇上“记忆”瓶颈 最近在折腾大语言模型应用时&#xff0c;我遇到了一个挺典型的问题&#xff1a;想让模型记住更多、更长的对话历史&#xff0c;但无论是直接增加上下文窗口&#xff0c;还是用传统的向量数据库做检索增强&#xff0c;都感觉差…...

面试题详解:检索链路设计全攻略——RAG 检索架构、查询理解、多路召回、混合检索、Rerank、上下文构造与评估闭环

1. 为什么说检索链路设计&#xff0c;是 RAG 项目的“生命线”&#xff1f;1.1 大模型回答质量&#xff0c;很多时候不是模型决定的&#xff0c;而是证据决定的在 RAG 系统里&#xff0c;大模型像一个会组织语言的“回答器”&#xff0c;但它能不能答准&#xff0c;取决于它面前…...

企业内网开发环境通过Taotoken安全调用外部大模型API

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内网开发环境通过Taotoken安全调用外部大模型API 对于许多企业开发团队而言&#xff0c;在内部研发流程中引入大模型能力已成为…...

Fansly下载器终极指南:3分钟学会离线保存你喜欢的创作者内容

Fansly下载器终极指南&#xff1a;3分钟学会离线保存你喜欢的创作者内容 【免费下载链接】fansly-downloader Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content of…...

ncmdump终极NCM解密转换完全指南

ncmdump终极NCM解密转换完全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾遇到过这样的困扰&#xff1f;从网易云音乐下载的歌曲只能在特定播放器中播放&#xff0c;想要在其他设备上欣赏却束手无策。这种被格式限制的…...

3分钟搞定Windows安卓应用:APK安装器让你的电脑秒变安卓设备!

3分钟搞定Windows安卓应用&#xff1a;APK安装器让你的电脑秒变安卓设备&#xff01; 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你知道吗&#xff1f;现在无需安装…...

惠普OMEN游戏本终极性能优化:OmenSuperHub开源工具完全指南

惠普OMEN游戏本终极性能优化&#xff1a;OmenSuperHub开源工具完全指南 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软件的臃…...