Ir para o conteúdo
skketch

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

Mensagens Recomendadas

skketch

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 ?

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Boas!

Tenta algo assim seguir ao fgets.

nome[strlen(nome)-1]='\0';

Editado por pmg
Falta de 'backslash'

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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 ?

não podes.

o caracter (se existir) será sempre lido.

qual o formato dos dados no ficheiro ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Shoxsz

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;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Shoxsz

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;
}

Editado por pmg
Falta LP no GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

    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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.