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

2.8 KiB
Raw Permalink Blame History

C 语言中的fscanf()函数

原文:https://overiq.com/c-programming-101/fscanf-function-in-c/

最后更新于 2020 年 7 月 27 日


该函数的语法是:

语法: int fscanf(FILE *fp, const char *format [, argument, ...] );

fscanf()功能用于从文件中读取格式化的输入。它的工作原理与scanf()功能类似,但它不是从标准输入中读取数据,而是从文件中读取数据。事实上,fscanf()函数的大多数参数与scanf()函数相同,只是它需要一个额外的参数,显然足够一个文件指针。成功时,此函数返回读取的值的数量,出错时或文件结束时,它返回EOF-1

下面的程序演示了如何使用fscanf()函数从文件中读取格式化数据。

#include<stdio.h>
#include<stdlib.h>

int main()
{
    FILE *fp;
    char name[50];
    int roll_no, chars;
    float marks;

    fp = fopen("records.txt", "r");

    if(fp == NULL)
    {
        printf("Error opening file\n");
        exit(1);
    }

    printf("Testing fscanf() function: \n\n");
    printf("Name:\t\tRoll\t\tMarks\n");

    while( fscanf(fp, "Name: %s\t\tRoll no: %d\t\tMarks: %f\n"
                    , name, &roll_no, &marks) != EOF )
    {
        printf("%s\t\t%d\t\t%.2f\n", name, roll_no ,marks);
    }

    fclose(fp);
    return 0;
}

预期输出:

Name: Tina      Roll no: 1       Marks: 45.00
Name: Nina      Roll no: 5       Marks: 89.00
Name: Tim       Roll no: 2       Marks: 49.00
Name: Jim       Roll no: 8       Marks: 41.00
Name: King      Roll no: 9       Marks: 59.00

工作原理:

在第 6 行中,声明了类型为struct FILE的结构指针fp

在第 7 行中,声明了一个大小为 50 的字符名称数组。

在第 8 行,声明了两个 int 变量 roll_no 和 chars。

在第 9 行中,声明了 float 类型的变量标记。

在第 11 行fopen()函数用两个参数调用即“records.txt”和“r”。成功后它返回一个指向文件 records.txt 的指针,并以只读模式打开文件 records.txt。失败时它返回空值。

在第 13-17 行if 语句用于测试 fp 的值。如果为空printf()语句将打印错误消息,程序终止。否则,程序继续执行 if 语句后面的语句。

在第 19 行和第 20 行,我们有两个 printf()语句将“Testing fscanf()函数:\n\n”和“Name:\ t \ tRoll \ t \ t 说明\n”打印到控制台。

在第 22-26 行中while 循环与 fscanf()函数一起用来读取文件中的格式化数据,并将它们存储在变量名 roll_no 和 marks 中。printf()语句然后被用户用来打印从文件中读取的数据。fscanf()一直读取,直到遇到 EOF。当条件变为假并且控制脱离循环时遇到文件结尾。

在第 28 行,调用 fclose()函数关闭文件。