请编写一段代码关于getc ungetc, 展示两者的区别以及用法。
时间: 2023-07-16 19:16:07 浏览: 205
C语言的getc()函数和gets()函数的使用对比
`getc`和`ungetc`是C语言标准库中提供的两个函数,用于从文件中读取字符。
`getc`函数的原型为:`int getc(FILE *stream)`,它从指定的文件流中读取一个字符,并返回其ASCII码值。如果读取成功,则返回该字符的ASCII码值;如果到达文件末尾或读取出错,则返回常量EOF。
`ungetc`函数的原型为:`int ungetc(int c, FILE *stream)`,它将指定的字符c退回到文件流中。如果退回成功,则返回该字符的ASCII码值;如果退回失败,则返回常量EOF。
下面是一个简单的示例程序,演示了如何使用`getc`和`ungetc`函数:
```c
#include <stdio.h>
int main() {
FILE *fp = fopen("test.txt", "r");
if (!fp) {
printf("Failed to open file.\n");
return 1;
}
// 读取文件中的第一个字符
int c = getc(fp);
printf("First character: %c\n", c);
// 将刚才读取的字符退回到文件流中
ungetc(c, fp);
// 再次读取文件中的第一个字符
c = getc(fp);
printf("First character again: %c\n", c);
fclose(fp);
return 0;
}
```
在这个示例程序中,我们首先打开了一个名为“test.txt”的文件,然后使用`getc`函数读取了该文件中的第一个字符,并将其保存在变量c中。接着,我们使用`ungetc`函数将变量c中保存的字符退回到文件流中。最后,我们再次使用`getc`函数读取文件中的第一个字符,并将其输出到控制台上。
需要注意的是,`ungetc`函数只能将一个字符退回到文件流中。如果尝试将多个字符退回到文件流中,可能会导致不可预知的行为。此外,`ungetc`函数只能将最近读取的字符退回到文件流中,而不能将文件流中的任何其他字符退回。
阅读全文