當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 ungetc用法及代碼示例


C語言stdio頭文件(stdio.h)中ungetc函數的用法及代碼示例。

用法:

int ungetc ( int character, FILE * stream );
從流中取消角色
A 字符實際上被放回輸入中,降低其內部文件位置好像以前getc操作被撤消。

字符可能是也可能不是從在前麵的輸入操作中。無論如何,從中檢索下一個字符是個字符傳遞給此函數,與原始函數無關。

但是請注意,這僅會影響該設備上的進一步輸入操作,而不是與之關聯的物理文件的內容,對此函數的任何調用都不會對其進行修改。

某些庫的實現可能支持多次調用此函數,從而使字符以相反的順序可用放回去。盡管此行為沒有標準的可移植性保證,並且在除第一個調用之外的任何數量的調用之後,其他調用都可能完全失敗。

如果成功,該函數將清除文件結束指示符(如果當前已設置),並減少其內部文件位置指示如果它以二進製模式運行;在文字模式下,位置指示器具有未指定的值,直到所有字符都放回ungetc已被讀取或丟棄。

調用fseekfsetpos或者rewind會丟棄以前使用此函數放回其中的所有字符。

如果參數傳遞給字符參數是EOF,操作失敗,輸入保持不變。

參數

character
這個int推廣角色要放回去。
該值在內部轉換為unsigned char當放回去。
stream
指向一個指針FILE標識輸入流的對象。

返回值

成功之後,字符放回去。
如果操作失敗,EOF返回。

示例

/* ungetc example */
#include <stdio.h>

int main ()
{
  FILE * pFile;
  int c;
  char buffer [256];

  pFile = fopen ("myfile.txt","rt");
  if (pFile==NULL) perror ("Error opening file");
  else while (!feof (pFile)) {
    c=getc (pFile);
    if (c == EOF) break;
    if (c == '#') ungetc ('@',pFile);
    else ungetc (c,pFile);
    if (fgets (buffer,255,pFile) != NULL)
      fputs (buffer,stdout);
    else break;
  }
  return 0;
}


本示例打開一個現有文件,名為myfile.txt用於讀取並打印其行,但首先獲取每行的第一個字符,然後將其放回流中,以替換任何開頭#由一個@

相關用法


注:本文由純淨天空篩選整理自C標準庫大神的英文原創作品 C ungetc function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。