Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve um problema que ocorre quando você lê linhas de texto usando a Fscanf
função.
Versão original do produto: Visual C
Número original do KB: 60336
Resumo
Quando um arquivo é aberto no modo de texto, uma tentativa de ler linhas de texto usando a Fscanf
função pode falhar e apenas uma linha de texto é lida do arquivo. O delimitador é definido como [^\n]
. A Fscanf
função lê até, mas não inclui o caractere delimitador. Portanto, o fluxo de arquivos é interrompido no primeiro \n
arquivo. As chamadas de função subsequentes Fscanf
falham porque o ponteiro do arquivo permanece no caractere delimitador e a Fscanf
função não pode avançar o ponteiro da função além dele. Para mover o ponteiro do arquivo além do caractere delimitador, use um dos dois métodos a seguir:
Atualize o código para usar a seguinte
Fscanf
chamada de função:fscanf(stream, "%[^\n]%*c", line)
O
%*c
especificador de formato lê um caractere do fluxo de entrada, mas não o atribui a nenhum dos parâmetros nafscanf
chamada de função.Chame a
Fgetc
função após a chamada deFscanf
função para mover o ponteiro do arquivo além do\n
caractere.
O exemplo de código a seguir demonstra esse problema. O exemplo de código deve ler e imprimir linhas de um arquivo de texto até atingir o EOF. No entanto, o exemplo de código lê apenas a primeira linha do arquivo. Como o caractere de fim de arquivo não foi encontrado, o exemplo de código será executado em um loop infinito se o fluxo de arquivos contiver um \n
caractere.
Exemplo de código
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF )
{
printf("Line = %s \n",line);
}
O exemplo de código a seguir demonstra o segundo método acima para contornar esse problema:
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF)
{
fgetc(stream); // Reads in '\n' character and moves file
// stream past delimiting character
printf("Line = %s \n", line);
}