Autor Tópico: scanf e \n  (Lida 4822 vezes)

Offline Vnepomuceno

  • Usuário Ubuntu
  • *
  • Mensagens: 2
    • Ver perfil
scanf e \n
« Online: 30 de MAR?O de 2009, 15:04 »
Muito boa tarde!

Estou a desenvolver um projecto que consiste em ler um ficheiro dado como input, fazer uma série de operações e devolver um certo ficheiro como output. Algumas destas operações envolvem o armazenamento numa variável, da linha que está a ser lida.

A leitura de ficheiro, estou a fazê-la com um while do tipo:

Código: [Selecionar]
char *word = malloc(sizeof(char) * 20);
while(scanf("%s", word) != EOF)
{...}

Porém estou com um pequeno problema, todo o projecto fiz a sacar palavras (ao contrário do que poderia ter feito com caracteres) e não sei como fazer para "detectar" o \n e assim incrementar a variável da linha actual... Já virei e revirei várias soluções, mas nenhuma se adequa perfeitamente. Até já procurei sobre formatações especiais de scanf's, mas também não encontrei nada de especial.

Podiam-me dar uma ajuda, sff?

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: scanf e \n
« Resposta #1 Online: 01 de Abril de 2009, 11:07 »
Não sei se entendi bem o que você quer fazer. Talvez uma possível solução seja ler o arquivo linha-a-linha (com fgets) e usar strtok ou strtok_r para separar os tokens.

Ok, é mais complicado do que fscanf, mas deve funcionar...

[]s
Fred

Offline kunigas

  • Usuário Ubuntu
  • *
  • Mensagens: 77
  • DK
    • Ver perfil
    • Página pessoal, Guilherme Kunigami
Re: scanf e \n
« Resposta #2 Online: 09 de Abril de 2009, 22:32 »
Outra coisa que você pode fazer:

Código: [Selecionar]
while (scanf("%[^\n]", word) != EOF){
    getchar();
    ...
}

O scanf lê até encontrar o caracter "\n" e não lê esse último (por isso o usamos o getchar()).