函式
<cwchar>

ungetwc

wint_t ungetwc (wint_t wc, FILE* stream);
將寬字元推回到流中
將寬字元 wc 虛擬地推回到輸入流 stream 中,減少其 內部檔案位置,如同之前進行的 getwc 操作被撤銷一樣。

這個 寬字元 可能與之前輸入操作從 stream 讀取的字元相同,也可能不同。無論如何,從 stream 中獲取的下一個寬字元將是 wc,而與原始字元無關。

請注意,這僅影響對該 stream 的後續輸入操作,而不會修改與之關聯的物理檔案的內容,物理檔案不會因呼叫此函式而改變。

某些庫實現可能支援多次呼叫此函式,使字元以推回的相反順序可用。儘管這種行為沒有標準的便攜性保證,但執行多次呼叫後,除第一次之外的後續呼叫可能會失敗。

如果成功,該函式將清除 stream檔案結束指示符(如果當前已設定)。位置指示符 的值在所有透過此函式推回的字元被再次讀取或丟棄之前是不確定的。ungetwc被再次讀取或丟棄。

stream 呼叫 fseekfsetposrewind 將會丟棄先前透過此函式推回的所有字元。

如果作為 wc 傳遞的引數是 WEOF,則操作失敗,輸入 stream 保持不變。

這是 ungetc(在 <cstdio> 中)的 寬字元 等效函式。

引數

wc
要推回的寬字元的 wint_t 提升值。
該值在推回時被內部轉換為wchar_t時推回。
stream
指向標識輸入流的 FILE 物件的指標。
該流不應有任何朝向,或應是寬字元朝向的(對流的第一個 I/O 操作決定了它是位元組朝向還是寬字元朝向,請參閱 fwide)。

返回值

成功時,返回被推回的 寬字元
如果操作失敗,則返回 WEOF

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* ungetwc example */
#include <stdio.h>
#include <wchar.h>

int main ()
{
  FILE * pFile;
  wint_t wc;
  wchar_t buffer [256];

  pFile = fopen ("myfile.txt","rt");
  if (pFile!=NULL) while (!feof (pFile)) {
    wc=getwc (pFile);
    if (wc != WEOF) {
      if (wc == L'#') ungetwc (L'@',pFile);
      else ungetwc (wc,pFile);
      fgetws (buffer,255,pFile);
      fputws (buffer,stdout);
    }
  }
  return 0;
}

此示例開啟名為myfile.txt的檔案進行讀取並列印其行,但在列印之前,獲取每行的第一個字元並將其推回流中,除非該行以#開頭,在這種情況下,它被替換為@.

另見