📜  C C++中的ungetc()(1)

📅  最后修改于: 2023-12-03 15:13:44.530000             🧑  作者: Mango

C/C++中的ungetc()

ungetc() 是指在读取流中的字符时将字符退回到流中。在大多数情况下,当我们从输入流中读取字符并因某种原因而不需要使用它时,ungetc() 函数将在其中派上用场。此函数可使我们将字符退回到缓冲区中,以便我们稍后能够在代码中再次使用它。

#include <stdio.h>

int main() {
    int c;
    FILE *fp = fopen("test.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }
    c = getc(fp);  // 读取文件中的第一个字符
    printf("Read character '%c'\n", c);  // 输出读取的字符
    ungetc(c, fp);  // 把字符退回到文件流中
    c = getc(fp);  // 再次读取文件中的第一个字符
    printf("Read character again '%c'\n", c);  // 输出再次读取的字符
    fclose(fp);
    return 0;
}

在上面的示例代码中,我们打开了名为 "test.txt" 的文件,并读取了文件中的第一个字符。然后我们使用 ungetc() 函数将该字符退回到文件流中,并再次使用 getc() 从文件流中读取字符。最后我们输出了第二次读取的字符。程序应该输出以下内容:

Read character 'H'
Read character again 'H'

注意,ungetc() 对于流缓冲区来说最多可以退回一个字符,而且只能回退我们刚刚读取的字符。

语法

ungetc() 函数的语法如下所示:

int ungetc(int ch, FILE *stream);

此函数需要两个参数:

  • ch:强制退回到流中的字符。
  • stream:指向要退回源自的流对象的指针。
返回值

如果字符退回到流中,则此函数返回一个非负值,否则返回 EOF

总结

在 C 和 C++ 中,ungetc() 函数是一个有用的库函数,用于使字符退回到输入流中。它可以帮助我们在编写代码时更加灵活地处理输入数据。