一、C语言的输入与输出
C语言中的输入与输出操作通过标准库函数实现,printf
和scanf
是最常用的输入输出函数。输入与输出操作依赖于缓冲区来临时存储数据,缓冲区的刷新和清除是确保数据正确传递的重要步骤。此外,C语言还提供了文件输入与输出的功能,通过文件操作函数可以实现数据的持久化存储。
C语言输入、输出缓冲区的优势:
二、什么是流
1. 流的概念
水从水龙头流出,通过水管流向水槽。在这个过程中,水龙头是水的源头,水槽是水的目的地,水管则是水流动的通道。类似地,在计算机科学中,流可以看作是数据从一个源头(如键盘、文件、网络)流向一个目的地(如屏幕、文件、网络)的通道。
流的特点:
- 连续性:数据像水流一样连续不断地传输。
- 方向性:数据有明确的流动方向,从源头流向目的地。
- 缓冲:流通常会使用缓冲区来临时存储数据,以提高传输效率。
在计算机中,流是一种抽象的数据通道,用于处理输入和输出操作。流可以处理各种类型的数据,包括字符、字节、文件等。流的主要优点是它们提供了一种统一的方式来处理不同类型的数据源和目的地。
- 输入流:从外部设备(如键盘、文件)读取数据到程序中。
- 输出流:将程序中的数据写入到外部设备(如屏幕、文件)。
2.C++中的流
三、C++的IO流
1.标准IO流
标准I/O流对象
C++标准库提供了四个主要的预定义流对象:
cin
:标准输入流,用于从键盘读取数据。cout
:标准输出流,用于向屏幕输出数据。cerr
:标准错误流,用于向屏幕输出错误信息。clog
:标准日志流,用于向屏幕输出日志信息。
cin
- 标准输入流
cin
用于从标准输入设备(通常是键盘)读取数据。它通常与提取操作符>>
一起使用。
#include <iostream>
int main() {
int number;
std::cout << "Enter a number: ";
std::cin >> number; // 从键盘读取数据
std::cout << "You entered: " << number << std::endl;
return 0;
}
cout
- 标准输出流
cout
用于向标准输出设备(通常是屏幕)输出数据。它通常与插入操作符<<
一起使用。
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl; // 向屏幕输出数据
return 0;
}
cerr
- 标准错误流
cerr
用于向标准输出设备(通常是屏幕)输出错误信息。与cout
不同,cerr
通常是无缓冲的,这意味着错误信息会立即显示。
#include <iostream>
int main() {
std::cerr << "An error occurred!" << std::endl; // 向屏幕输出错误信息
return 0;
}
clog
- 标准日志流
clog
用于向标准输出设备(通常是屏幕)输出日志信息。与cerr
不同,clog
通常是有缓冲的,这意味着日志信息会在缓冲区满或程序结束时才显示。
#include <iostream>
int main() {
std::clog << "Logging some information." << std::endl; // 向屏幕输出日志信息
return 0;
}
注意:
2.文件IO流
文件I/O流是C++中用于处理文件输入和输出操作的一组类。它们允许程序从文件中读取数据(输入)或将数据写入文件(输出)。C++标准库通过<fstream>
头文件提供了文件I/O流的支持,主要包括三个类:
ifstream
:用于从文件中读取数据(输入文件流)。ofstream
:用于向文件中写入数据(输出文件流)。fstream
:用于同时进行文件的读取和写入操作(输入输出文件流)。
四、stringstream
在C语言中如果想要将一个整形变量的数据转化为字符串格式,如何去做?
于是C++更新了stringstream,stringstream
是 C++ 标准库中的一个类,用于处理字符串的输入和输出操作。它属于 <sstream>
头文件,提供了类似于 cin
和 cout
的功能,但操作的对象是字符串而不是标准输入输出设备。
stringstream
主要用于以下场景:
- 字符串拼接:将多个字符串或其他数据类型拼接成一个字符串。
- 字符串解析:从字符串中提取数据,类似于从文件或标准输入读取数据。
示例:
#include <sstream>
#include <iostream>
int main() {
std::stringstream ss;
// 字符串拼接
int number = 42;
std::string text = "The answer is";
ss << text << " " << number;
// 获取字符串内容
std::string result = ss.str();
std::cout << "Concatenated string: " << result << std::endl; // 输出: The answer is 42
// 清空 stringstream
ss.clear();
ss.str("");
// 字符串解析
std::string input = "Hello 123";
ss << input;
std::string extractedText;
int extractedNumber;
ss >> extractedText >> extractedNumber;
std::cout << "Extracted text: " << extractedText << std::endl; // 输出: Hello
std::cout << "Extracted number: " << extractedNumber << std::endl; // 输出: 123
return 0;
}
注意: