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(键盘输入、文件输入)
输出流:coutcerrclog(屏幕输出、文件输出)

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格式化库:: 现如今编译工具支持比较不好。