📅  最后修改于: 2020-09-25 08:38:57             🧑  作者: Mango
ungetc() 函数在
int ungetc(int ch, FILE* stream);
除非ch
等于EOF,否则ungetc() 函数会将字符 ch
推回与文件流关联的缓冲区。如果ch
等于EOF,则操作失败,并且流中没有变化。
如果多次调用ungetc(),而中间没有任何读取或重新定位操作,则调用可能会失败。
如果对ungetc()的调用成功,则清除文件状态标志feof。
对于二进制流,成功调用ungetc会将流位置指示符减一。如果流位置指示器为零,则行为是不确定的。
对于文本流,成功调用ungetc会以未指定的方式修改流位置指示符。但是可以保证,在通过读取操作检索到所有推回的字符之后,流位置指示符等于其值,然后调用ungetc()。
#include
#include
#include
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