English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C 语言基础教程

C 语言流程控制

Funções C

Array C

Ponteiro C

String C

C 语言结构体

C 语言文件

C 其他

C 语言参考手册

C 库函数 fscanf() 的使用方法和示例

Biblioteca Padrão - <stdio.h>

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

声明

下面是 fscanf() 函数的声明。

int fscanf(FILE *stream, const char *format, ...)

参数

  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

  • format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 e 格式说明符
    格式说明符的形式为 [=%[*][width][modifiers]type=],具体解释如下:

参数描述
*这是一个可选的星号,表示数据是从流 stream 中读取的,但可以被忽略,即它不存储在对应的参数中。
width这指定了在当前读取操作中读取的最大字符数。
modifiers指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小,为指向的附加参数所指向的数据: h : tipo de inteiro curto (para d, i e n), ou tipo inteiro curto sem sinal (para o, u e x) l : tipo de inteiro longo (para d, i e n), ou tipo inteiro longo sem sinal (para o, u e x), ou tipo de precisão dupla (para e, f e g) L : tipo de precisão longa (para e, f e g)
typeum caractere, que especifica o tipo de dados a ser lido e a maneira de leitura dos dados. Consulte a tabela a seguir.

fscanf tipo de sinalizador:

do tipoentrada qualificadado tipo de parâmetro
cCaractere único: lê o próximo caractere. Se especificado um não 1 largura width, a função lê width caracteres, os armazena em posições contínuas no array e não adiciona caractere nulo no final.char *
dNúmero inteiro decimal: o prefixo de número + ou - é opcional.int *
e,E,f,g,GNúmero flutuante: contém um ponto decimal, um sinal opcional + ou -um caractere posterior opcional e um número decimal. Dois exemplos válidos -732.103 e 7.12e4float *
oNúmero inteiro octal.int *
sString. Isso lê caracteres contínuos até encontrar um caractere de espaço (o caractere de espaço pode ser espaço em branco, nova linha e tabulação).char *
uNúmero inteiro decimal sem sinal.unsigned int *
x,XNúmero inteiro hexadecimal.int *
  • Parâmetros Adicionais -- De acordo com diferentes strings formatadas, a função pode precisar de uma série de parâmetros adicionais, cada um contendo um valor a ser inserido, que substitui cada etiqueta % no formato. O número de parâmetros deve ser igual ao número de etiquetas %.

Retorno

Se executar com sucesso, a função retorna o número de correspondências e atribuições bem-sucedidas. Se alcançar o final do arquivo ou ocorrer um erro de leitura, retorna EOF.

Exemplo Online

Abaixo está um exemplo que demonstra o uso da função 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("Nós estamos em 2009", fp);
   
   rewind(fp);
   fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
   
   printf("Ler string1 |%s|\n", str1 );
   printf("Ler string2 |%s|\n", str2 );
   printf("Ler string3 |%s|\n", str3 );
   printf("Ler inteiro |%d|\n", year);
   fclose(fp);
   
   return(0);
}

Vamos compilar e executar o programa acima, o que produzirá o seguinte resultado:

Ler String1 |We|
Ler String2 |are|
Ler String3 |in|
Ler Inteiros |2009|

Biblioteca Padrão - <stdio.h>