2.3 KiB
C 中的fgetc()函数
原文:https://overiq.com/c-programming-101/fgetc-function-in-c/
最后更新于 2020 年 7 月 27 日
fgetc()函数的语法是:
语法: int fgetc(FILE *fp);
该功能与fputc()功能互补。它从文件中读取一个字符,并递增文件位置指针。要使用此功能,文件必须以读取模式打开。成功后,它会返回字符的 ASCII 值,但您也可以将结果分配给类型为char的变量。在失败或文件结束时,它返回EOF或-1。
正如fputc()这个函数也使用缓冲存储器。因此,不是从文件中逐个读取单个字符,而是将文件中的整个字符块读入缓冲区。然后一次将一个字符交给功能fgetc(),直到缓冲区为空。如果文件中仍有一些字符需要读取,则再次将一个字符块读入缓冲区。
下面的程序演示了如何使用fgetc()功能。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ch;
FILE *fp;
fp = fopen("myfile.txt", "r");
if(fp == NULL)
{
printf("Error opening file\n");
exit(1);
}
printf("Reading contents of myfile.txt: \n\n");
while( (ch=fgetc(fp)) != EOF )
{
printf("%c", ch, ch);
}
fclose(fp);
return 0;
}
预期输出:
Reading contents of myfile.txt:
Testing fputc() function
工作原理:
在第 6 行,声明了类型为int的变量ch。
在第 7 行,声明了类型为struct FILE的结构指针变量fp。
在第 8 行中,fopen()函数用两个参数调用,即"myfile.txt"和"r"。成功后,它返回一个指向文件"myfile.txt"的指针,并以只读模式打开文件"myfile.txt"。失败或文件结束时,返回NULL。
第 10 行,if 语句用于测试fp的值。如果是NULL,printf()语句打印错误信息,程序终止。否则,程序继续执行 if 语句后面的语句。
在第 16 行中,printf()语句将"Reading contents of myfile.txt: \n\n"打印到控制台。
在第 18-21 行,使用 while 循环从文件中逐个读取字符,并使用printf()语句将其打印到控制台(也可以使用 putchar()函数)。ch = fgetc(fp)周围的括号是必要的,因为!=运算符的优先级大于=运算符。
第 23 行,fclose()功能用于关闭文件。