A função Fscanf não lê linhas consecutivas conforme o esperado

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 60336
Sumário
Quando um arquivo é aberto no modo de texto, uma tentativa de ler as linhas de texto usando a função Fscanf pode falhar e apenas uma linha de texto será lido do arquivo. O delimitador é definido como "[^ \n]". A função Fscanf lê até, mas não inclui o caractere de delimitação. Portanto, o fluxo de arquivos pára no primeiro '\n' no arquivo. Chamadas de função Fscanf subseqüentes falham, pois o ponteiro de arquivo permanece no caractere de delimitação e a função Fscanf não é possível avançar o ponteiro de função passado ele. Para mover o ponteiro de arquivo após o caractere de delimitação, use um dos dois métodos a seguir:
  • Atualizar o código para usar a seguinte chamada de função Fscanf :
          fscanf(stream, "%[^\n]%*c", line)
    A "% * c" especificador de formato lê um caractere do fluxo de entrada mas não o atribui a qualquer um dos parâmetros na chamada de função fscanf.
  • Chame a função Fgetc depois que a função Fscanf chamada para mover o ponteiro arquivo além o caractere '\n'.
O exemplo de código a seguir mostra esse problema. O exemplo de código deve ler e imprimir linhas de um arquivo de texto até alcançar EOF. No entanto, o exemplo de código lê somente a primeira linha do arquivo. Desde que o caractere de final de arquivo não foi encontrado, o exemplo de código é executado em um loop infinito se o fluxo de arquivo contém um caractere "\n".

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 este 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);}
8.0 9.0 10.0 11.0

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 60336 - Última Revisão: 09/29/2005 23:17:08 - Revisão: 3.0

The C Run-Time (CRT)

  • kbmt kbtshoot kbcode kbprb KB60336 KbMtpt
Comentários