ungetc ()- 將字元推送至輸入串流

格式

#include <stdio.h>
int ungetc(int c, FILE *stream);

語言層次

ANSI

安全執行緒

說明

ungetc() 函數會將不帶正負號的字元 c 推送回給定的輸入 串流。 不過,如果您連續呼叫 ungetc() ,則只保證將一個連續字元推回輸入串流。 串流 必須開啟以進行讀取。 串流 上的後續讀取作業從 c開始。 字元 c 不能是 EOF 字元。

如果在從 串流讀取字元之前呼叫 fseek()fsetpos()rewind()fflush() ,則會消除 ungetc() 放置在串流上的字元。

回覆值

ungetc() 函數會傳回轉換為 不帶正負號字元的整數引數 c ,如果 c 無法回復,則會傳回 EOF

錯誤碼的值可以設為:
Value
意義
ENOTREAD
未開啟檔案進行讀取作業。
EIOERROR
發生非可回復I/O錯誤。
EIORECERR
發生可回復I/O錯誤。

type=record開啟的檔案不支援 ungetc() 函數。

範例

在此範例中, while 陳述式會使用算術陳述式從輸入資料串流中讀取小數位數,以在它讀取數字時撰寫數字的數值。 當檔案結尾之前出現非數字字元時, ungetc() 會取代輸入串流中的非數字字元,以便稍後的輸入函數可以處理它。
#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
   FILE *stream;
   int ch;
   unsigned int result = 0;
   while ((ch = getc(stream)) != EOF && isdigit(ch))
      result = result * 10 + ch - '0';
   if (ch != EOF)
      ungetc(ch,stream);
         /* Put the nondigit character back */
   printf("The result is: %d\n", result);
   if ((ch = getc(stream)) != EOF)
      printf("The character is: %c\n", ch);
}

相關資訊