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


C++ ungetc()用法及代碼示例


C++ 中的ungetc() 函數將先前讀取的字符推回流中,以便可以再次讀取它。

ungetc() 函數在<cstdio> 頭文件中定義。

ungetc()原型

int ungetc(int ch, FILE* stream);

ungetc() 函數將字符 ch 推回與文件流關聯的緩衝區,除非 ch 等於 EOF。如果ch 等於EOF,則操作失敗並且流中沒有變化。

如果多次調用 ungetc() 而中間沒有任何讀取或重新定位操作,則調用可能會失敗。

如果對ungetc() 的調用成功,則清除文件結束狀態標誌 feof。

對於二進製流,成功調用 ungetc 會將流位置指示符減一。如果流位置指示符為零,則行為是不確定的。

對於文本流,成功調用 ungetc 會以未指定的方式修改流位置指示符。但可以保證,在通過讀取操作檢索到所有pushed-back 字符之後,流位置指示符等於調用ungetc() 之前的值。

參數:

  • ch : 被推回的角色。
  • stream:角色被推回的文件流。

返回:

  • 成功時,ungetc() 函數返回字符 ch
  • 失敗時返回 EOF 而不更改流。

示例:ungetc() 函數如何工作?

#include <cstdio>
#include <cctype>
#include <iostream>
using namespace std;

int main()
{
	int c;
	long value = 0;
	char str[] = "101axc";

	FILE *fp = fopen("file.txt", "r+");
	fputs(str,fp);
	rewind(fp);

	while(1)
	{
		c = fgetc(fp);
		if (isdigit(c))
			value = value*10 + c - '0';
		else
			break;
	}

	ungetc(c, fp);
	cout << "Value = " << value << endl;
	fclose(fp);

	return 0;
}

運行程序時,可能的輸出將是:

Value = 101

相關用法


注:本文由純淨天空篩選整理自 C++ ungetc()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。