C++ 标准输入输出

开始之前,我们先来说说水管,对,就是家里接水的水管,比如下水道的水管啦,热水器的水管啦

在没有热水器之前,我们怎么洗澡呢?就是拿着一个桶,装满水,然后洗啊洗,洗到一半半的时候就要再去拎一桶水,很不方便啊,尤其是冬天。有了热水器,我们只要打开开关,喷头里的水就会自动流出来了,而且源源不绝

它们有什么区别呢? 就是打洗澡水的方式,一个是一遍一遍的去拎,一个是只要打开开关,就会自己流出来

这跟我们编程有啥关联呢?

C++ 把用户输入的数据和要输出的数据封装成一个流 (stream), 就像热水管里的水一样,长长的,连绵不绝的

C++ 中的流是字节序列。如果字节流是从设备 ( 如键盘、磁盘驱动器、网络连接等 ) 流向内存,这叫做 输入操作

如果字节流是从内存流向设备 ( 如显示屏、打印机、磁盘驱动器、网络连接等 ) 叫做 输出操作

C++ I/O 库头文件

C++ 提供了三个头文件用于处理 I/O

头文件 描述
<iostream> 定义了 cincoutcerrclog对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流
<iomanip> 通过所谓的参数化的流操纵器 ( 比如 setwsetprecision ) ,来声明对执行标准化 I/O 有用的服务
<fstream> 为用户控制的文件处理声明服务

标准输出流 ( cout )

预定义对象 cout "连接" 到标准输出设备,通常是显示屏

cout 定义在命名空间 std 当中,所以一般的使用方法是 std:cout

std::cout 一般与流插入运算符 << 一起使用

#include <iostream>

int main( )
{
   std::cout << "Hello www.twle.cn ";

   return 0;
}

使用 g++ main.cpp && ./a.out 命令编译和运行代码,输出结果如下

Hello www.twle.cn

标准输入流 ( cin )

预定义对象 cin 是 "连接" 到标准输入设备,通常是键盘

cin 定义在命名空间 std 当中,所以一般的使用方法是 std:cout

std::cin 一般与流提取运算符 >> 一起使用,意思是提取标准输入(std:cin)里的数据

#include <iostream>

int main( )
{
   char name[128];

   std::cout << "请输入一段英文";
   std::cin >> name;
   std::cout << "你输入的数据为:" << name << std::endl;

   return 0;
}

使用 g++ main.cpp && ./a.out 命令编译和运行代码,它会提示用户输入名称。当用户输入一个值,并按回车键,就会看到下列结果:

请输入一段英文www.twle.cn
你输入的数据为:www.twle.cn

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

cin >> name >> age;

相当于下面两个语句

cin >> name;
cin >> age;

标准错误流(cerr)

预定义的对象 cerr "连接** 到标准错误设备,通常也是显示屏

cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出

cerr 定义在命名空间 std 当中,所以一般的使用方法是 std:cerr

std::cerr 一般与流插入运算符 << 一起使用,意思是将流里的数据插入到标准错误输出(std:cerr)

#include <iostream>

int main( )
{
   std::cerr << "发生错误了啊" << std::endl;

   return 0;
}

使用 g++ main.cpp && ./a.out 命令编译和运行代码,输出结果如下

发生错误了啊

标准日志流 ( clog )

预定义的对象 clog "连接" 到标准错误设备,通常也是显示屏

clog对象是缓冲的,每个流插入到 clog 都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出

clog 定义在命名空间 std 当中,所以一般的使用方法是 std:clog

std::clog 一般与流插入运算符 << 一起使用,意思是将流里的数据插入到标准日志流(std:clog)

#include <iostream>

int main( )
{
   std::clog << "Error message : Unable to read...\n";

   return 0;
}

使用 g++ main.cpp && ./a.out 命令编译和运行代码,输出结果如下

Error message : Unable to read...

最佳实战

一般情况下,是我们无法区分 coutcerrclog 的差异

但在编写复杂的程序的时候,它们之间的差异就变得非常明显

一般情况下,使用 cerr 流来显示错误消息,而其它的日志消息则使用 clog 流来输出

C++ 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.