C++ 基础输入/输出



C++ 标准库提供了广泛的输入/输出功能,我们将在后续章节中介绍。本章将讨论 C++ 编程所需的非常基本和最常见的 I/O 操作。

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

I/O 库头文件

以下是 C++ 程序中重要的头文件:

序号 头文件 & 函数和描述
1

<iostream>

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

2

<iomanip>

此文件声明了用于使用所谓的参数化流操作符(例如setwsetprecision)执行格式化 I/O 的服务。

3

<fstream>

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

4

<bits/stdc++.h>

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

标准输出流 (cout)

预定义对象coutostream类的实例。cout 对象被称为“连接到”标准输出设备,通常是显示屏。cout与流插入运算符一起使用,该运算符写为<<(两个小于号),如下例所示。

示例

#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++ 编译器还会确定要输出的变量的数据类型,并选择合适的流插入运算符来显示该值。<< 运算符被重载以输出内置类型整数、浮点数、双精度数、字符串和指针值的数据项。

插入运算符<<可以如上所示在一个语句中使用多次,并且endl用于在行尾添加换行符。

标准输入流 (cin)

预定义对象cinistream类的实例。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;
 
}

编译并执行上述代码时,它将提示您输入姓名。您输入一个值,然后按 Enter 键查看以下结果:

Please enter your name: cplusplus
Your name is: cplusplus

C++ 编译器还会确定输入值的类型,并选择合适的流提取运算符来提取该值并将其存储到给定的变量中。

流提取运算符>>可以在一个语句中使用多次。要请求多个数据,可以使用以下方法:

cin >> name >> age;

这将等同于以下两个语句:

cin >> name;
cin >> age;

标准错误流 (cerr)

预定义对象cerrostream类的实例。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类的实例。clog 对象被称为连接到标准错误设备,这也是显示屏,但是clog对象是有缓冲的。这意味着每次插入 clog 都会将其输出保存在缓冲区中,直到缓冲区已满或缓冲区被刷新。

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 流显示错误消息,而显示其他日志消息时则应使用 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 TutorialsPoint!" << endl;

  // Input of user's name and number
  cout << "Please enter your name: ";
  cin >> name;
  cout << "Please enter a number: ";
  cin >> number;
  cout << "Hello," << name << " You entered " << number << endl;

  // Demonstrating some STL features
  // #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;

  // Sort and display the numbers
  // #include <algorithm>
  sort(numbers.begin(), numbers.end());
  cout << "Sorted numbers: ";
  for (int num : numbers) {
    cout << num << " ";
  }
  cout << endl;

  return 0;
}

编译并执行上述代码时,将产生以下结果:

Welcome to TutorialsPoint!
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>,因为它包含了输入/输出操作、字符串处理、动态数组和算法所需的所有必要的标准库,从而简化了您的代码,使其更简洁、更方便。它尤其用于竞争性编程。

广告