千家信息网

C/C++中I/O进阶怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关C/C++中I/O进阶怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述C++ 的输入 (input stream) 和输出 (o
千家信息网最后更新 2026年11月01日C/C++中I/O进阶怎么用

这篇文章将为大家详细讲解有关C/C++中I/O进阶怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

概述

C++ 的输入 (input stream) 和输出 (output stream)是由若干字节组成的字节序列, 使得数据按顺序从一个对象传送到另一对象. 流 (stream) 表示量信息从源到目的端的流动.

C++ 的输入输出包括:

标准 I/O: 对系统指定的标准设备的输入

文件 I/O: 对磁盘文件的输入和输出

串 I/O: 对内存中指定的空间进行的输入和输出

I/O 类库

I/O stream 类库:

头文件是程序与类库的接口, iostream 类库的接口分别由不同的文件来实现.

常用的头文件:

iostream: 包含对 I/O 进行操作的基本信息

fstream: 用于用户管理的文件的 I/O 操作

strstream: 用于字符串流的 I/O 操作

stdiostream: 用于混合使用 C 和 C++ 的 I/O 机制

iomanip: 使用格式化 I/O 时的操作

I/O 中的重载

在之前的文章中我们使用<<和>>来实现控制台的输出和输入.

<<和>>被重载来用于标准类型数据的输出和输入:

  • <<和>>本来是 C++ 中的左位移运算符和右位移运算符

  • 在 iostream 头文件中<<和>>被重载了

  • 在使用<<和>>的时候, 我们必须#include

在 input stream 和 output stream 类中对位移运算符<<和>>进行重载的成员函数, 包括:

  • ostream operator << (int );

  • ostream operator << (float );

  • ostream operator << (char );

  • ostream operator << (char *);

注: 想将<<和>>用于自己声明的类型数据必须对<<和>>进行重载.

流对象

I/O stream 头文件还定义了 4 种流对象:

  • cin: 从标准输入设备输入到内存的数据流对象, 称- 为 cin 流或标准输入流

  • cout: 从内存输出到控制台的数据流对象, 称为 cout 流或标准输出流

  • cerr 和 clog: 向控制台输出错误信息

例如:

当我们从键盘输入 "World", cin 会把字符串存入内存, 当我们调用 cout, 内存中的 "World" 就被输出到控制台上.

标准输入流

标准输出流, 是流向标准输出设备的数据. ostream 类定义了 3 个输出流对象: cout, cerr, clog.

cin 流对象

cin 是 istream 类的对象, 从标准输入设备获取数据. 程序中的变量通过流提取符>>从 cin 流中提取数据:

流提取符>>从流中提取数据时, 通常跳过流中的空格, tab 键, 换行符等空白字符

只有在输入完数据再按回车键后, 该行数据才被送入键盘缓冲区, 形成输入流. 提取运算符>>才能从中提取数据

程序将从键盘缓冲区中连续的获得数据

当遇到无效字符或文件结束符^Z时, cin 无法正常提取数据, 处于出错状态, 返回 0 值 (false)

案例

输入个数不确定的成绩:

#include #include using namespace std;int main() {    // 定义变量    double grade;    cout << "enter your grade:\n";    while (cin >> grade){        if(grade >= 85){            cout << grade << " Good!" << endl;        }        if(grade < 60){            cout << grade << " fail" << endl;        }        cout << "enter your grade:\n";    }    cout << "The end." << endl;    return 0;}

输出结果:

enter your grade:
90
90 Good!
enter your grade:
12
12 fail
enter your grade:
^Z
The end.

get 函数

不带参数的 get 函数:

cin.get()
  • 从输入流中提取一个字符, 返回读入的字符

  • 遇到输入流中的文件结束符, 则返回 EOF (End Of File)

有一个参数的 get 函数:

cin.get(c)
  • 从输入流中读取一个字符, 赋值给字符变量 c

  • 读取成功返回真, 失败或遇到文件结束符返回 0 (false)

有 3 个参数的 get 函数:

cin.get(字符数组或指针, n, 终止字符)
  • 从输入流中读取 n-1 个字符, 赋值给指定的字符数组

  • 若在读取 n-1 个字符之前遇到指定的终止字符, 则提前结束读取

  • 读取成功函数返回真, 失败返回 0 (false)

getline 函数

getline 函数的作用是从输入流中读取一行字符. 例如:

istream &getline(char *buffer, streamsize num );istream &getline(char *buffer, streamsize num, char delim );

getline 函数用于输入流, 读取字符到 buffer 中, 直到:

  • num-1 个字符已经读入

  • 碰到一个换行标志

  • 碰到一个 EOF

  • 读到字符 delim

注: getline 函数遇到空白字符不结束.

eof 函数

eof (End Of File) 表示文件结束. 从输入流读取数据如果达到文件末尾或遇到文件结束符时, eof 函数的值为非零值 (true), 否则为 0 (false)

cout 流对象

cout 是 console input 的缩写, 意为在控制台的输出:

  • cout 不是 C++ 预定义的关键字, 它是 ostream 流类的对象, 在 iostream 中定义

  • "cout <<" 输出基本类型的数据时, 可以不必考虑数据是什么类型,系统会判断数据的类型, 并根据其类型选择调用与之匹配的运算符重载函数

  • cout 流在内存中对应开辟了一个缓冲区, 用来存放流中的数据, 当向 cout 流插入一个 endl 时, 立即输出流中所有数据, 然后插入一个换行符, 并刷新流 (清空缓冲区)

  • cout.flush(); 输出流中所有数据, 刷新缓冲区

cerr 流对象

cerr 流对象是标准错误流, 被指定为与显示器关联. cerr 的作用是想标准组错误设备 (standard error device) 输出有关出错信息.

cerr 和 cout 的区别:

  • cout 流通常是传送到显示器输出, 但也可以被重新定向输出到磁盘文件

  • cerr 流中的信息只能在显示器输出

cerr 的用途:

  • 当调试程序时, 往往不希望程序运行时的出错信息被送到其他文件, 而要求在显示器上及时输出, 这是应该用 cerr

  • cerr 流中的信息是用户根据需要指定的

案例 (解一元二次方程):

#include #include using namespace std;int main() {    double a, b, c, delta;    cout << "please input a, b, c:\n";    cin >> a >> b >> c;    if (a==0){        cerr << "a is equal to zero, error!" << endl;    }else if((delta = b*b - 4*a*c) < 0){        cerr << "delta < 0, error" << endl;    }else{        cout << "x1=" << (-b + sqrt(delta)) / (2*a) << endl;        cout << "x1=" << (-b - sqrt(delta)) / (2*a) << endl;    }        return 0;}

输出结果:

clog 流对象

colg 流对象也是标准错误流, 它是 console log 的缩写. clog 的作用和 cerr 相同, 都是在终端显示器上显示出错误信息.

clog 和 cerr 的区别:

  • cerr 是不经过缓冲区, 直接向显示器上输出有关信息

  • clog 中的信息存放在缓冲区, 缓冲区满后或遇到 endl 时向显示器输出

关于"C/C++中I/O进阶怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

输出 输入 数据 字符 文件 对象 函数 标准 信息 缓冲区 缓冲 显示器 类型 内存 程序 设备 运算符 控制 运算 控制台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 壹账通互联网科技 奇酷互联网络科技公司 苏州大垚互联网科技 科技互联网创业计划书 深圳卡尔迅互联网科技有限公司怎么样 昭通云南众福互联网科技有限公司 茂名市互联网科技产业园 来此购互联网科技有限公司 和信科技工业互联网 想开互联网科技公司怎么样 浙南科技城互联网大厦建设工程 高科技互联网发展前景如何 用友工业互联网科技发展 群盈汇互联网科技有限公司 广州燕处互联网科技有限公司 全球科技与互联网公司市值变化 10位科技互联网大佬 小牛互联网科技有限公司地址 互联网的科技 礼当家互联网科技 互联网女皇 腾讯科技 科技互联网的核心竞争力 上海创道互联网络科技有限公司 萌小萌互联网科技河南有限公司 福建互联网展示科技馆设计 兰石爱特工业互联网科技分公司 平安好医生打造互联网科技医疗 互联网科技创业计划的风险分析
0