C语言 <stdio.h> fscanf() 函数

  • 描述

    C库函数int fscanf(FILE *stream, const char *format, ...)从流中读取格式化的输入。
  • 声明

    以下是fscanf()函数的声明。
    
    int fscanf(char *str, const char *format, va_list arg)
    
    参数
    • stream -这是指向标识流的FILE对象的指针。
    • format - 这是C字符串,包含以下一项或多项:- 空白字符,非空白字符和格式说明符。格式说明符将为[=%[*][width][modifiers]type=],下面将对此进行说明-
    • 参数 说明
      * 这是一个可选的开始星号,指示要从流中读取数据但将其忽略,即,该数据未存储在相应的参数中。
      width 这指定了当前读取操作中要读取的最大字符数。
      modifiers 为由指针指向的数据指定一个与int(对于d,i和n而言),unsigned int(对于o,u和x而言)或float(对于e,f和g而言)不同的大小。 相应的附加参数:h:short int(对于d,i和n),或者unsigned short int(对于o,u和x)l:long int(对于d,i和n),或者unsigned long int(对于o, u和x)或double(对于e,f和g)L:long double(对于e,f和g)
      type 一个字符,指定要读取的数据类型以及预期如何读取。 请参阅下表。
      type 合法输入 数据类型
      c 单个字符:读取下一个字符。 如果指定的宽度不同于1,则该函数读取宽度字符并将其存储在作为参数传递的数组的连续位置中。 在末尾没有空字符。 char *
      d 十进制整数:数字(可选)后跟+或-号 int *
      e, E, f, g, G 浮点数:包含小数点的十进制数,可以选择在其前面加上+或-号,并可以选择在其后跟随e或E字符以及一个十进制数字。 有效条目的两个示例是-732.103和7.12e4 float *
      o 八进制整数: int *
      s 字符串。 这将读取后续字符,直到找到空白为止(空白字符被视为空白,换行符和制表符)。 char *
      u 无符号十进制整数。 unsigned int *
      x, X 十六进制整数 int *
    • 其他参数 - 根据格式字符串的不同,该函数可能需要一系列附加参数,每个参数包含一个要插入的值,而不是format参数中指定的每个%-tag(如果有)。 这些参数的数量应与期望值的%-tag数量相同。
  • 返回值

    此函数返回成功匹配和分配的输入项目的数量,该数量可能少于所提供的数量,在早期匹配失败的情况下甚至为零。
    示例
    以下示例显示fscanf()函数的用法-
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main () {
       char str1[10], str2[10], str3[10];
       int year;
       FILE * fp;
    
       fp = fopen ("file.txt", "w+");
       fputs("We are in 2012", fp);
       
       rewind(fp);
       fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
       
       printf("Read String1 |%s|\n", str1 );
       printf("Read String2 |%s|\n", str2 );
       printf("Read String3 |%s|\n", str3 );
       printf("Read Integer |%d|\n", year );
    
       fclose(fp);
       
       return(0);
    }
    
    让我们编译并运行以上程序,这将产生以下结果-
    
    Read String1 |We|
    Read String2 |are|
    Read String3 |in|
    Read Integer |2012|