nhamii_02 Posted December 27, 2011 at 10:03 AM Report #428540 Posted December 27, 2011 at 10:03 AM 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... Obgd
pmg Posted December 27, 2011 at 10:10 AM Report #428542 Posted December 27, 2011 at 10:10 AM 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!
nhamii_02 Posted December 27, 2011 at 10:14 AM Author Report #428543 Posted December 27, 2011 at 10:14 AM 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á 👍
HappyHippyHippo Posted December 27, 2011 at 10:23 AM Report #428546 Posted December 27, 2011 at 10:23 AM verifica se o nome ou morada tem mais do que uma palavra pois a pesquisa por "%s" termina no primeiro caracter não alpha-numérico IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
nhamii_02 Posted December 27, 2011 at 10:25 AM Author Report #428547 Posted December 27, 2011 at 10:25 AM olá. têm.. :/ a morada. nao sei como resolver esse problema por isso e que tava a tentar usar o fgets...
pmg Posted December 27, 2011 at 10:37 AM Report #428550 Posted December 27, 2011 at 10:37 AM 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!
nhamii_02 Posted December 27, 2011 at 11:45 AM Author Report #428561 Posted December 27, 2011 at 11:45 AM Obrigad. já consegui 👍
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now