Pergunta

Como saber que fscanf atingiu uma nova linha \ n em um arquivo. Tenho vindo a utilizar minhas próprias funções para fazer isso. Eu sei que eu posso usar fgets e depois sscanf para o meu padrão exigido. Mas as minhas necessidades não são estáveis, algumas vezes eu quero começar TAB separados cordas, algumas vezes nova linha separada cordas e algumas vezes algum caráter especial separados cordas. Portanto, se há alguma maneira de saber da nova linha de fscanf por favor me ajude. Ou então quaisquer formas alternativas também são bem vindos.

Agradecemos antecipadamente.

Foi útil?

Solução

fscanf(stream, "%42[^\n]", buffer);

é um equivalant de fgets (tampão, 42, corrente). Você não pode substituir a 42 por * para especificar o tamanho do buffer no argumento (como você pode fazer em printf), seu significado é para suprimir a atribuição. Então

fscanf(stream, "%*[^\n]%*c");

ler até (e incluído) no próximo final de caractere de linha.

Qualquer especificador de conversão diferente de [, c e n iniciar saltando espaços em branco.

Outras dicas

Kernighan e Pike no excelente livro ' The Practice of Programming 'mostrar como usar sprintf() para criar um especificador de formato adequado incluindo o comprimento (semelhante aos exemplos na resposta por AProgrammer), e depois usar isso na chamada para scanf(). Dessa forma, você também pode controlar os separadores. Preocupações sobre a 'ineficiência' desta abordagem provavelmente estão erradas -. As alternativas são mais difíceis de acertar

Dito isso, eu mais normalmente não usar a família scanf() de funções para arquivo I / O; Eu obter os dados em uma string com algum tipo de rotina 'obter linha', e depois usar a família sscanf() de funções para dividi-la -. Ou outra mais especializada código de análise

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top