geekdoc-python-zh/docs/overiq/081.md

2.3 KiB
Raw Permalink Blame History

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的值。如果是NULLprintf()语句打印错误信息,程序终止。否则,程序继续执行 if 语句后面的语句。

在第 16 行中,printf()语句将"Reading contents of myfile.txt: \n\n"打印到控制台。

在第 18-21 行,使用 while 循环从文件中逐个读取字符,并使用printf()语句将其打印到控制台(也可以使用 putchar()函数)。ch = fgetc(fp)周围的括号是必要的,因为!=运算符的优先级大于=运算符。

第 23 行,fclose()功能用于关闭文件。