一、std::istream概述
std::istream是C++標準庫中的一個輸入流類,其主要用於從各種輸入設備上讀取數據,比如鍵盤、文件和字符串等。
std::istream繼承自std::basic_ios類,因此它具備了一些基本的輸入/輸出操作接口。此外,std::istream還提供了一系列自己特有的函數,方便讀取數據。
二、std::istream成員函數
1、get()
get()函數的功能是從輸入流中讀取一個字符,並將其作為一個整數返回。如果輸入流已經結束,即到達了文件結尾或者發生了錯誤,則返回EOF(End of File)。
該函數可重載,有多種形式。例如,get(char& c)函數會將讀取到的字符保存在參數c中。
std::istream& get(char& c);
2、getline()
getline()函數的功能是從輸入流中讀取一行數據,並將其保存在一個string對象中。函數會讀取到換行符(’\n’)為止,並將其丟棄。
該函數可重載,有多種形式。例如,getline(std::istream& is, char* str, std::streamsize count)函數會從輸入流is中讀取最多count個字符,並將其保存在以str為起始地址的內存中。
std::istream& getline(char* str, std::streamsize count);
3、peek()
peek()函數的功能是讀取下一個字符,但不從輸入流中移除它。也就是說,調用peek()函數不會改變輸入流的讀取位置。
該函數可重載,有多種形式,其中istream& peek(char_type& ch)函數會將下一個字符保存在參數ch中。
std::istream& peek();
三、std::istream標誌位
1、std::ios_base::eofbit
eofbit標誌位表示輸入流已經到達文件結尾。當eofbit被設置後,任何讀取操作都將導致失敗。
2、std::ios_base::failbit
failbit標誌位表示輸入操作已經失敗,並且失敗原因是由於無法獲取足夠的字符或者字符格式錯誤等。
3、std::ios_base::badbit
badbit標誌位表示輸入操作已經失敗,並且失敗原因是由於設備錯誤等問題。
四、std::istream使用示例
下面的代碼演示了如何使用std::istream從文件中讀取數據,並使用getline()函數讀取一行數據:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ifstream file("test.txt");
if (!file)
{
std::cerr << "Can't open input file" << std::endl;
return -1;
}
std::string line;
while (std::getline(file, line))
{
std::cout << line << std::endl;
}
file.close();
return 0;
}
上面的代碼首先打開了一個名為test.txt的文件,並使用流提取運算符(operator >>)將文件中的數據讀取到變量line中。此外,當文件讀取完成後,應該顯式關閉文件句柄以釋放資源。
五、總結
本文主要對std::istream類進行了詳細的闡述,介紹了其基本概念、成員函數以及標誌位。並通過示例代碼演示了如何從文件中讀取數據。當然,std::istream類還有更多的使用技巧和細節,讀者可以通過查閱相關文獻進一步深入學習。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/250729.html