📜  C++ ungetc()

📅  最后修改于: 2020-09-25 08:38:57             🧑  作者: Mango

C++中的ungetc() 函数将先前读取的字符推回到流中,以便可以再次读取它。

ungetc() 函数在头文件中定义。

ungetc()原型

int ungetc(int ch, FILE* stream);

除非ch等于EOF,否则ungetc() 函数会将字符 ch推回与文件流关联的缓冲区。如果ch等于EOF,则操作失败,并且流中没有变化。

如果多次调用ungetc(),而中间没有任何读取或重新定位操作,则调用可能会失败。

如果对ungetc()的调用成功,则清除文件状态标志feof。

对于二进制流,成功调用ungetc会将流位置指示符减一。如果流位置指示器为零,则行为是不确定的。

对于文本流,成功调用ungetc会以未指定的方式修改流位置指示符。但是可以保证,在通过读取操作检索到所有推回的字符之后,流位置指示符等于其值,然后调用ungetc()。

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