Jump to content

Dúvida sobre fgets...


Recommended Posts

Posted
  
FILE *f;
f=fopen("moradas.txt","r+");
char Nome[30];
int idade;
char morada[50];
  
while(fscanf(f,"%s %d %s",Nome,&idade)!=feof)
        if(strcmp(Nome,"Maria")==0) {fgets(morada,20,f);}

ok então é assim. Tenho este pedaço de código que nao me está a funcionar. basicamente eu queria que todas as pessoas que se chamem Maria, ver a morada delas, que é a segunda string...

pensava que assim dava porque estou a percorrer o ficheiro todo e quando encontrar alguma maria, copiava o que dizia a seguir, 20 espaços.

Alguém está a ver algum erro? É que da-me falha de segmentação...  :wallbash:

Obgd

Posted

  
while(fscanf(f,"%s %d %s",Nome,&idade)!=feof)
//              1  2  3   1    2

Três dum lado; dois do outro ... ou está qualquer coisa a mais dum lado ou a menos do outro.

Sugiro que configures o teu compilador para o máximo de "warnings" possível. Depois faz compilações limpas, sem erros nem "warnings".

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!

Posted

Sugiro que configures o teu compilador para o máximo de "warnings" possível. Depois faz compilações limpas, sem erros nem "warnings".

Como se faz isso??

--

Mesmo pondo ali a

while((fscanf(f,"%s %d %s",Nome,&idade,morada))!=feof)
        if(strcmp(Nome,"NODE")==0) {fgets(morada,10,f);}

não dá  👍

Posted

Não mistures o fscanf com o fgets. Ou usas o fgets junto com o sscanf (ou outras funções)

char buf[1000];
/* ... */
while (fgets(buf, sizeof buf, stdin) != NULL) {
  if (sscanf(buf, "%s%d%s", Nome, &idade, morada) != 3) /* erro */;
  /* ... */
}

ou o fscanf sozinho

while (fscanf(buf, "%s%d%s", Nome, &idade, morada) == 3) {
  /* ... */
}

Nota que o tratamento de erros com o fscanf sozinho é muito mais dificil de fazer que com o fgets.

Como é que aumento o nível de "warnings"?

Depende do compilador que tens.

Com o gcc, experimenta gcc -std=c89 -pedantic -Wall ...; com o Visual Studio deve estar lá pelo meio qualquer coisa que diz "warning level 4"?.

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!

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.