0. 前言
接上文C++基础与深度解析01,本篇主要介绍C++的输入输出流,如下
1. 基础概念
1.1头文件
通常,在一个 C++ 程序中,只包含两类文件—— .cpp 文件和 .h 文件。其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码;而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码。
当想在test01.cpp中使用test01.h文件中定义的函数或者结构体等时,需要在test02.cpp中添加#include<test02.h>
文件,更多的时候,通过此方法调用C++函数库中的函数和结构体等。
1.2 命名空间
在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称都将存在于全局 作用域 中,可能会导致很多的命名冲突。 使用命名空间的目的是对标识符的名称进行本地化,归类于特定的空间,以避免命名冲突或名字污染。
举个例子,通常我们想使用cout输出时,代码为
#include<iostream>
int main()
{
std::cout << "Hello" << std::endl;//表示调用命名空间std下的函数cout;
return 0;
}
可以通过关键词 namespace
来简化代码
#include<iostream>
using namespace std;
int main()
{
cout << "Hello" << endl;
return 0;
}
对于较长的命名空间(例如:nodespacelist),也可以起别名,比如 namespace ns1 = nodespacelist ;
2.iostream
C++标准库提供的IO接口,用于与用户交互。
输入流:cin
(键盘输入、文件输入)
输出流:cout
、cerr
、clog
(屏幕输出、文件输出)
2.1 简单代码示例
#include<iostream>
using namespace std;
int main()
{
int age;
cout << "How old are you?" << endl;
cin >> age;//键盘输入年龄
cout << "You are " << age << endl;
}
2.2三种输出流区别
cout
: 标准输出流
cerr
: 标准错误流(非缓冲):和cout
的区别是,其必须显示在屏幕上,可以在不占用内存的情况下输出错误信息。
clog
:标准错误流(缓冲):和cerr
的区别是cerr
不经过缓冲区,直接向显示器输出信息,而clog
中的信息存放在缓冲区,缓冲区满或者遇到endl
时才输出,在大量信息输出时表现出较快速度。
endl
是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。同样flash
也可以刷新缓冲区。
2.3 cin
文件输入和cout
文件输出(作业)
name.txt 如下
zhangsan
lisi
wangwu
mike
xiaofang
Ellie
现通过屏幕显示和键盘依次输入个人的姓名,并且输出到新的文件name_age.txt,格式如下
zhangsan 12
lisi 13
wangwu 34
mike 16
xiaofang 15
Ellie 45
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
ifstream infs("E:\\test01.txt");
ofstream oufs("E:\\test02.txt");
if (!infs.good())
{
cout << "Input error!" << endl;
return 0;
}
string line;
float age = 0;
while (getline(infs, line))
{
cout << "Please input the age of " << line << endl;
cin >> age;
oufs << line << " "<<age << endl;
}
return 0;
}
2.4 其他输入输出方法
**printf
**函数:使用起来比较直观简洁,但是容易写错;
C++ 20格式化库:
现如今编译工具支持比较不好。