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);
}