English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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) |
type | um 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 tipo | entrada qualificada | do tipo de parâmetro |
---|---|---|
c | Caractere ú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 * |
d | Número inteiro decimal: o prefixo de número + ou - é opcional. | int * |
e,E,f,g,G | Nú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.12e4 | float * |
o | Número inteiro octal. | int * |
s | String. 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 * |
u | Número inteiro decimal sem sinal. | unsigned int * |
x,X | Nú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 %.
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.
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|