Jump to content
skketch

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

Recommended Posts

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 ?

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
AJBM

Boas!

Tenta algo assim seguir ao fgets.

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

Edited by pmg
Falta de 'backslash'

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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;
}

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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;
}

Edited by pmg
Falta LP no GeSHi

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
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.