Jump to content

Obter a maior palavra num ficheiro.


Recommended Posts

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

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

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
Posted

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

Posted

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

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

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.