joaomb Posted May 7, 2013 at 06:58 AM Report #506004 Posted May 7, 2013 at 06:58 AM (edited) ola, estou a começar ficheiros em c e queria um programa para me dar a maior palavra de um ficheiro, sendo que cada linha tem apenas uma palavra, isto e o que tenho ,mas por razoes que nao entendo nao funciona, #include <stdio.h> #include <stdlib.h> #define MAX 25 void palavra_maior(FILE *fp) { char temp[MAX]; char maior[MAX]; rewind(fp); fscanf(fp,"s",maior); fgets(maior,MAX,fp); while(fgets(temp,"%s",fp)!=NULL) { if(strlen(maior)<strlen(temp)) strcpy(maior,temp); } printf("A palavra maior e %s ",maior); } Edited May 7, 2013 at 09:06 AM by brunoais tags code + geshi + título MUUUUITO melhorado.
HappyHippyHippo Posted May 7, 2013 at 09:09 AM Report #506015 Posted May 7, 2013 at 09:09 AM tens imensos erros no teu código, mas existe algo que não percebo : fscanf(fp,"s",maior); // | // que é isto ? fgets(maior,MAX,fp); // <--- olha para os argumentos da chamada da função fgets while(fgets(temp,"%s",fp)!=NULL) // <--- olha para os argumentos da chamada da função fgets } podes explicar porque fizeste de maneira diferente ? ainda por cima estão em linhas adjacentes !! 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 09:22 AM Author Report #506022 Posted May 7, 2013 at 09:22 AM (edited) sim sim tens razao, esta tinha sido uma versao mas depois enganei-me a postar, esta foi aquela com que fiquei no final,ja agora como e que meto o codigo a aparecer na caixa?: #include <stdio.h> #include <stdlib.h> #define MAX 25 void palavra_maior(FILE *fp) { char temp[MAX]; char maior[MAX]; rewind(fp); fgets(maior,MAX,fp); while(fgets(temp,MAX,fp)!=NULL) { if(strlen(maior)<strlen(temp)) strcpy(maior,temp); } printf("A palavra maior e %s ",maior); } Edited May 7, 2013 at 09:35 AM by pmg formatacao, GeSHi
HappyHippyHippo Posted May 7, 2013 at 09:28 AM Report #506025 Posted May 7, 2013 at 09:28 AM ê em voz alta o seguinte código (é o que tens no teu código) if (strlen(maior) < strlen(temp)) strcpy(maior, temp); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 09:33 AM Author Report #506027 Posted May 7, 2013 at 09:33 AM Se o tamanho da palavra na proxima linha for maior que o maior actual, copia do temp para o maior.
HappyHippyHippo Posted May 7, 2013 at 09:49 AM Report #506033 Posted May 7, 2013 at 09:49 AM então não existe problema nenhum, pois não ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 09:52 AM Author Report #506035 Posted May 7, 2013 at 09:52 AM o unico que eu acho pode haver é a sobreposiçao das strings
HappyHippyHippo Posted May 7, 2013 at 09:54 AM Report #506036 Posted May 7, 2013 at 09:54 AM ? sobreposição de strings ? o que consideras ser "isso" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 10:01 AM Author Report #506039 Posted May 7, 2013 at 10:01 AM se encontrar no texto algum caracter irregular e so copiar ate ai tipo um \t,porque fora isso nao estou a ver.
ruirodrigues1971 Posted May 7, 2013 at 10:18 AM Report #506042 Posted May 7, 2013 at 10:18 AM Para a próxima faz debug do programa ... corre linha a linha (usando step) e coloca na janela Watch a variável temp e maior ... assim detectas facilmente os teus erros. 😉 https://www.youtube.com/embed/eEJ5xKO7c3o?feature=oembed
HappyHippyHippo Posted May 7, 2013 at 10:21 AM Report #506044 Posted May 7, 2013 at 10:21 AM o fgets lê toda uma linha até o '\n' (inclusivé) ou o tamanho maximo dado do buffer onde irá guardar os dados. se tens o ficheiro mal formatado, então terás de o formatar bem, porque de outra forma terias de fazer linhas e linhas de código para colmatar todas as possibilidades de erro ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 10:22 AM Author Report #506046 Posted May 7, 2013 at 10:22 AM Para a próxima faz debug do programa ... corre linha a linha (usando step) e coloca na janela Watch a variável temp e maior ... assim detectas facilmente os teus erros. 😉 https://www.youtube.com/embed/eEJ5xKO7c3o?feature=oembed sim eu costumo fazer o debug no codeblocks mas por exemplo na linha "fgets(maior,MAX,fp);" eu vejo que ele nao me copia o que existe na primeira linha ,so nao sei pq visto que ja vi varios exemplos assim...
joaomb Posted May 7, 2013 at 11:52 AM Author Report #506061 Posted May 7, 2013 at 11:52 AM entao ja agora quais sao os erros???
HappyHippyHippo Posted May 7, 2013 at 11:55 AM Report #506062 Posted May 7, 2013 at 11:55 AM entao ja agora quais sao os erros??? não existe erros de código. os únicos problemas que te podem aparecer são : - o ficheiro encontrasse vazio - alguma linha do ficheiro tem mais do que 23 caracteres (tens de ter mais um para o '\n' final e outro para o '\0') IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 12:01 PM Author Report #506064 Posted May 7, 2013 at 12:01 PM (edited) jJA percebi o erro, estava a abrir com w em vez de w+, obrigado pelas dicas... #include <stdio.h> #include <stdlib.h> #define MAX 25 void primario(void) { FILE *fp; int i=0; printf("Insira palavras\n"); char temp[MAX]; fp=fopen("palavras.txt","[b]w[/b]");/**w+*/ while(1) { fgets(temp,MAX,stdin); if(strcmp(temp,"\n")==0) /*se uma linha so tiver /n break*/ { break; } else { fprintf(fp,"%s",temp); } } palavra_maior(fp); fclose(fp); } /****** funcao1 ******/ void palavra_maior(FILE *fp) { char temp[MAX]; char maior[MAX]; rewind(fp); fgets(maior,MAX,fp); while(fgets(temp,MAX,fp)!=NULL) { if(strlen(maior)<strlen(temp)) strcpy(maior,temp); } printf("A palavra maior e %s ",maior); } Edited May 7, 2013 at 01:02 PM by joaomb
HappyHippyHippo Posted May 7, 2013 at 12:02 PM Report #506065 Posted May 7, 2013 at 12:02 PM epa ... tens o código correcto acima e agora apresentas um código cheio de erros e problemas ??? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 12:35 PM Author Report #506071 Posted May 7, 2013 at 12:35 PM epa ... tens o código correcto acima e agora apresentas um código cheio de erros e problemas ??? foi como tinha dito tinha-me enganado a versao que tinha apresentado a 1 vez tava cheia de erros pq foi a primeira que escrevi e ainda nao sabia trabalhar bem com as funcoes
HappyHippyHippo Posted May 7, 2013 at 12:49 PM Report #506072 Posted May 7, 2013 at 12:49 PM o que disse foi que a última está cheia de erros !!! IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
joaomb Posted May 7, 2013 at 01:05 PM Author Report #506075 Posted May 7, 2013 at 01:05 PM sim ja vi e ja corrigi obrg, mas olha que ela correu mesmo estando errada e dava certo
HappyHippyHippo Posted May 7, 2013 at 01:24 PM Report #506078 Posted May 7, 2013 at 01:24 PM sim ja vi e ja corrigi obrg, mas olha que ela correu mesmo estando errada e dava certo experimenta auemtnar o nível de erros do compilar e enfiar um -Werror e terias visto que nem sequer compilava ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
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