C++ get函數用法完全攻略

2020-07-16 10:04:42
每個輸入類 ifstream、fstream 和 istringstream 都有一個 get 系列成員函數,可用於讀取單個字元,語法如下:

int get();
istream& get(char& c);

第一個版本讀取單個字元。如果成功,則返回代表讀取字元的整數程式碼。如果不成功,則在流上設定錯誤程式碼並返回特殊值 EOF

下面的程式使用 get 函數將檔案複製到螢幕上。當 get() 返回 EOF 時,第 24?29 行的迴圈終止。
// This program demonstrates the use of the get member
// functions of the istream class
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{
    //Variables needed to read file one character at a time
    string fileName;
    fstream file;
    char ch; // character read from the file
    // Get file name and open file
    cout << "Enter a file name: ";
    cin >> fileName;
    file.open(fileName, ios::in);
    if (!file)
    {
        cout << fileName << " could not be opened .n";
        return 0;
    }
    // Read file one character at a time and echo to screen
    ch = file.get ();
    while (ch != EOF)
    {
        cout << ch;
        ch = file.get();
    }
    // Close file
    file.close ();
    return 0;
}
此程式將顯示任何檔案的內容。由於 get 函數不會跳過白色空格,因此所有字元都將按照檔案中的出現方式顯示。

get 的第二個版本是釆用一個字元變數的參照來讀取並返回讀取到的資料流。如果使用此版本的函數,則必須測試流以確定操作是否成功。如果用下面的程式碼替換上面程式中的第 24?29 行,那麼其表現並不會改變。
file.get(ch);
while (!file.fail ())
{
    cout << ch;
    file.get(ch);
}