C++ 基础输入输出怎么用?

文章导读
Previous Quiz Next C++ 标准库提供了一套丰富的输入/输出功能,我们将在后续章节中详细介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。
📋 目录
  1. I/O 库头文件
  2. 标准输出流 (cout)
  3. 标准输入流 (cin)
  4. 标准错误流 (cerr)
  5. 标准日志流 (clog)
  6. 使用 bits/stdc++ 进行输入/输出
A A

C++ 基本输入/输出



Previous
Quiz
Next

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

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

I/O 库头文件

以下头文件对 C++ 程序非常重要 −

Sr.No Header File & Function and Description
1

<iostream>

该文件定义了 cin, cout, cerrclog 对象,分别对应标准输入流、标准输出流、无缓冲标准错误流和缓冲标准错误流。

2

<iomanip>

该文件声明了用于执行格式化 I/O 的服务,通过所谓的参数化流操作符(如 setwsetprecision)实现。

3

<fstream>

该文件声明了用户控制的文件处理服务。我们将在文件和流相关章节中详细讨论。

4

<bits/stdc++.h>

该头文件包含了大部分标准 C++ 库的功能,无需逐个指定每个库即可添加广泛的功能。这在编码竞赛中特别有用。

标准输出流 (cout)

预定义对象 coutostream class 的实例。cout 对象被认为“连接到”标准输出设备,通常是显示屏。cout 与流插入操作符(<<,即两个小于号)结合使用,如以下示例所示。

Example

#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++ 编译器还会确定要输出的变量的数据类型,并选择合适的流插入操作符来显示值。<< 操作符被重载,用于输出内置类型(如 integer、float、double、strings 和 pointer values)的数据项。

如上所示,在单个语句中可以多次使用插入操作符 <<,而 endl 用于在行尾添加新行。

标准输入流 (cin)

预定义对象 cinistream class 的一个实例。cin 对象被认为附加到标准输入设备,通常是键盘。cin 与流提取运算符一起使用,该运算符写作 >>,即两个大于号,如以下示例所示。

示例

#include <iostream>
 
using namespace std;
 
int main() {
   char name[50];
 
   cout << "Please enter your name: ";
   cin >> name;
   cout << "Your name is: " << name << endl;
 
}

当上述代码编译并执行时,它会提示您输入姓名。您输入一个值然后按回车,将看到以下结果 −

Please enter your name: cplusplus
Your name is: cplusplus

C++ 编译器还会确定输入值的 data type,并选择合适的流提取运算符来提取该值并将其存储到指定的 variables 中。

流提取运算符 >> 可以在单个语句中使用多次。要请求多个 datum,可以使用以下方式 −

cin >> name >> age;

这等价于以下两个语句 −

cin >> name;
cin >> age;

标准错误流 (cerr)

预定义对象 cerrostream class 的一个实例。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)

预定义对象 clogostream class 的一个实例。clog 对象被认为附加到标准错误设备,这也是显示屏,但 clog 对象是有缓冲的。这意味着每次向 clog 插入都可能导致其输出被保存在 buffer 中,直到 buffer 填满或 buffer 被刷新。

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 stream 显示错误消息是一种好习惯,而显示其他日志消息时则应使用 clog。

使用 bits/stdc++ 进行输入/输出

bits/stdc++.h 是 C++ 中的一个非标准头文件,因为它不属于官方 C++ 标准库。相反,它是 GCC 特有的头文件,包含了 C++ 中大多数标准库。您也可以使用 bits/stdc++.h 进行输入和输出,而无需使用其他库。

示例

#include <bits/stdc++.h>
using namespace std;
int main() {
  int number;
  string name;

  // #include <iostream>
  // #include <string>
  cout << "Welcome to !" << endl;

  // 输入用户的姓名和数字
  cout << "Please enter your name: ";
  cin >> name;
  cout << "Please enter a number: ";
  cin >> number;
  cout << "Hello," << name << " You entered " << number << endl;

  // 演示一些 STL 特性
  // #include <vector>
  vector<int> numbers;
  cout << "Enter 4 numbers: ";

  for (int i = 0; i < 4; ++i) {
    int temp;
    cin >> temp;
    numbers.push_back(temp);
  }
  cout << "You entered the following numbers: ";
  for (int num : numbers) {
    cout << num << " ";
  }
  cout << endl;

  // 对数字进行排序并显示
  // #include <algorithm>
  sort(numbers.begin(), numbers.end());
  cout << "Sorted numbers: ";
  for (int num : numbers) {
    cout << num << " ";
  }
  cout << endl;

  return 0;
}

当上述代码编译并执行时,会产生以下结果 −

Welcome to !
Please enter your name: Aman
Please enter a number: 2006
Hello, Aman You 2006
Enter 4 numbers: 2
0
0
6
You entered the following numbers: 2 0 0 6 
Sorted numbers: 0 0 2 6

因此,在这里,我们没有使用诸如以下的多个头文件,

  • #include <iostream>
  • #include <string>
  • #include <vector>
  • #include <algorithm>

我们只需使用 <bits/stdc++.h>,因为它包含了输入/输出操作、字符串处理、动态数组和算法所需的所有必要标准库,这简化了您的代码,使其更简洁和便捷。它尤其适用于竞赛编程。