fscanf - obter entrada de um arquivo
#include <stdio.h>
int fscanf(FILE *stream, const char *format, ...);
Observe que ...
representa zero ou mais argumentos adicionais.
Esta função "lê" um arquivo em busca de valores de tipos especificados. Ela espera como entrada o ponteiro para um FILE
que foi retornado por fopen, uma "string de formato" que especifica o que esperar e zero ou mais argumentos subsequentes, cada um dos quais deve ser um local na memória. A string de formato deve conter geralmente "especificações de conversão", espaços reservados que começam com %
e especificam quais tipos de valores esperar. Os argumentos subsequentes receberão esses valores. Por exemplo, se n
for um int
, esta função pode obter um int
de um usuário usando %i
:
scanf("%i", &n);
Entre as especificações de conversão suportadas por esta função estão:
Especificação de Conversão | Tipo |
---|---|
%c |
char |
%f |
double |
%f |
float |
%i |
int |
%li |
long |
Para obter uma única palavra (ou seja, uma sequência de caracteres sem espaço), use %s
. No entanto, é seguro usar esta função para obter uma palavra de um arquivo usando %s
apenas se essa palavra tiver um comprimento máximo. Por exemplo, se file
for um ponteiro para um FILE
que foi retornado por fopen e buffer
for um array de 3 bytes, esta função poderá ser usada para obter "hi"
, incluindo o '\0'
, mas não "hi!"
, da seguinte forma:
fscanf(file, "%s", buffer);
Esta função retorna o número de argumentos que tiveram valores atribuídos ou EOF
, uma constante definida em stdio.h
, se o final do arquivo for alcançado.
#include <stdio.h>
int main(void)
{
FILE *file = fopen("hi.txt", "r");
if (file != NULL)
{
char buffer[3];
fscanf(file, "%s", buffer);
fclose(file);
printf("%s\n", buffer);
}
}