Jump to content
joaomb

Obter a maior palavra num ficheiro.

Recommended Posts

joaomb

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 by brunoais
tags code + geshi + título MUUUUITO melhorado.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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 !!

  • Vote 1

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

Share this post


Link to post
Share on other sites
joaomb

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 by pmg
formatacao, GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

ê 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

Share this post


Link to post
Share on other sites
joaomb

Se o tamanho da palavra na proxima linha for maior que o maior actual, copia do temp para o maior.

Share this post


Link to post
Share on other sites
HappyHippyHippo

então não existe problema nenhum, pois não ?


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

Share this post


Link to post
Share on other sites
HappyHippyHippo

? sobreposição de strings ? o que consideras ser "isso" ?


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

Share this post


Link to post
Share on other sites
joaomb

se encontrar no texto algum caracter irregular e so copiar ate ai tipo um \t,porque fora isso nao estou a ver.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
joaomb

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...

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
joaomb

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 by joaomb

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
joaomb

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que disse foi que a última está cheia de erros !!!


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

Share this post


Link to post
Share on other sites
joaomb

sim ja vi e ja corrigi obrg, mas olha que ela correu mesmo estando errada e dava certo

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

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.