public member function
<streambuf> <iostream>

std::basic_streambuf::sgetc

int_type sgetc();
獲取當前字元
在不修改當前位置的情況下,返回受控輸入序列當前位置的字元。

請注意,雖然相似,但以下成員函式的行為有所不同
成員函式,逐個字元列印字串的內容描述
sgetc()返回當前位置的字元。
sbumpc()返回當前位置的字元,並將當前位置推進到下一個字元。
snextc()將當前位置推進到下一個字元,並返回該下一個字元。

內部,如果讀取指標gptr)沒有可用的讀取位置,則該函式會呼叫虛保護成員 underflow。否則,該函式直接使用讀取指標gptr),而不呼叫虛成員函式。

其行為等同於如下實現:
1
2
3
4
int_type sgetc() {
  if ( (!gptr()) || (gptr()==egptr()) ) return underflow();
  else return traits_type::to_int_type(*gptr());
}

引數



返回值

受控輸入序列當前位置的字元,使用成員 traits_type::to_int_type 轉換為 int_type 型別的值。
如果受控輸入序列中沒有更多字元可供讀取,則函式返回檔案結束值(traits_type::eof())。
成員型別int_type是能夠表示任何字元值或特殊*檔案結束*符的整型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// show file content - sgetc() example
#include <iostream>     // std::cout, std::streambuf
#include <fstream>      // std::ifstream

int main () {
  std::ifstream istr ("test.txt");
  if (istr) {
    std::streambuf * pbuf = istr.rdbuf();
    do {
      char ch = pbuf->sgetc();
      std::cout << ch;
    } while ( pbuf->snextc() != std::streambuf::traits_type::eof() );
    istr.close();
  }
  return 0;
}

此示例顯示了一個檔案的內容在螢幕上,使用 sgetcsnextc 的組合來讀取檔案。

資料競爭

修改*流緩衝區*物件。
同時訪問同一*流緩衝區*物件可能會導致資料競爭。

異常安全

基本保證:如果丟擲異常,則流緩衝區處於有效狀態(這也適用於標準派生類)。

另見