使用 `getline` 函数如何处理空行或者EOF?
时间: 2024-10-22 12:08:42 浏览: 109
使用 `getline` 函数处理空行或 End-Of-File (EOF) 时,需要注意以下几点:
1. **空行**:当用户按下回车键两次,即连续两行空白时,`getline` 仍然会读取换行符并结束。因此,如果你期望获取空行,你需要检查读取的结果。如果 `line` 为空字符串 (`line.empty()`),则表示遇到了空行。
```cpp
std::getline(std::cin, line);
if (line.empty()) {
std::cout << "Empty line detected." << std::endl;
}
```
2. **EOF**:当你到达输入流的结尾(比如关闭了输入设备,程序运行结束),`getline` 将返回 false,或者读取到的内容将包含 EOF 标志。你可以通过比较 `line.size()` 来检查是否达到 EOF,因为这时 `line` 通常是一个特殊的终止值,其大小小于正常输入行。
```cpp
std::getline(std::cin, line);
if (line.empty() || line.size() == 1 && line[0] == '\0') {
std::cout << "End of file reached." << std::endl;
}
```
或者使用 `getline` 的返回值,它会在遇到错误或EOF时返回 `false`:
```cpp
std::getline(std::cin, line);
if (!std::cin) {
std::cerr << "Error reading from input stream." << std::endl;
}
```
记住,上述情况是在使用标准输入流 (`std::cin`) 时的处理方式。其他类型的输入流可能会有所不同。
阅读全文