Jump to content

Como nao ler "\n" ao ler uma string de um ficheiro


skketch

Recommended Posts

FILE *ww;
if ((ww = fopen("animal.txt", "r")) == NULL){
 printf("nao existe\n");
 peso = 50;
 fgets(nome, 80, stdin);
 text = write_text(nome);
} else {
 ww = fopen("animal.txt", "r");
 fscanf(ww, "%d", estado);
 fgets(nome, 79, ww);
 text = write_text(nome);
 peso = *estado;
 fclose(ww);
}

tenho este codigo e ao fazer fgets para ler a string do ficheiro este le tambem o "enter" ("/n") como faço para evitar isso ?

Link to comment
Share on other sites

use a função fscanf para ler strings, fiz um exemplo, o arquivo txt tem em seu conteúdo: "ola mundo", o código para ler:

#include <stdio.h>
int main()
{
   char buff[100];
   FILE* p = fopen("perere.txt", "r");
   while(!feof(p))
   {
       fscanf(p, "%s", buff);
       printf("%s\n", buff);
   }
   return 0;
}

estás a assumir que ele não se importa de ter as palavras todas separadas

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

tem razao, então ele quer ler 80 caracteres ou uma linha, o que vir primeiro, certo? crie uma função com fgets, ela vai lendo até encontrar um '\n' ou ler n bytes;

EDITADO

+/- assim

int ler(FILE* arquivo, int bytes, char* str)
{
int i, c;
for(i = 0; i < bytes; i++)
{
    if(feof(arquivo)) return i;

    c = fgets(arquivo);

    //nada na linha
    if(c == '\n' && i == 0)
        i--;

    if(c == '\n')
        break;

    str[i] = c;
}

str[i] = '\0';

return i;
}
Edited by pmg
Falta LP no GeSHi
Link to comment
Share on other sites

fgets ? não seria fgetc ?

além disso, não sabes como estão os dados no ficheiro, não podes supor o que ele quer sem que ele to diga o que quer

ler o ficheiro e uma operação muito genérica, falta responder perguntas como : o que quer ler, como está guardado o que quer ler, como quer ler, etc ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

    if(feof(arquivo)) return i;

Isto esta mal. A funcao feof() nao detecta se a proxima leitura vai falhar por falta de dados.

A funcao feof() determina se a ultima falha de leitura se deveu a falta de dados, em vez de, por exemplo, falha no disco, ou cabo de rede desligado, ...

Da maneira que tens, o teu ciclo corre uma vez (a ultima vez) com erro.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.