Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Atíria

Problemas Com O Fgets Em C

Recommended Posts

Olá pessoal! :goff:

Estou fazendo um programa que precisa ler de um arquivo com algumas palavras e reservá-las numa tabela. Cada uma dessas palavras está em linha diferente nesse arquivo.

Para ler as palavras, eu uso o fgets. Até aí tudo certo. No entanto quando eu crio uma função para buscar uma dessas palavras na tabela, ele retorna FALSE, ou seja, acusa que a palavra não está na carregada.

O problema é que ao ler a string do arquivo a função gets insere mais 3 caracteres além das letras: o '\0' que é normal, lógico; o '\n' que indica o fim da linha e o CR cujo ascii é 13. Devido a esses dois últimos o programa não reconhece a palavra que é digitada no prompt.

Como eu poderia retirar esses dois últimos caracteres da palavra que é reservada na memória principal?! Existe alguma outra função além do fgets que possa ler linha por linha e não inserir esses caracteres?!

Muito obrigada pessoal :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

A maneira intuitiva...

Conte a string até o '\0'

e strncmp... para comparar até n...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em vez de tentar sacar a palavra inteira do ficheiro use o fgetc para retirar a palavra do ficheiro letra a letra. Exemplo:

while((c=fgetc(fp)) != EOF){

switch( c ){

    case '\n': ... break;

      case '\0': ... break;

      case '13': ... break;

      default:   ... break;

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu gente!

Mas eu preciso ler de modo efiente todo bloco de palavra por linha! Consegui isso com o fscanf!!

!!!!!!! :palmas:

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí galera... tenha uma duvida sobre o fgets em c...

estou querendo imprimir o conteudo de um txt em colunas na tela, porém só imprima a mesma palavra e a próxima coluna é toda desordenada.

alguém pode me ajudar???

fico grato...

OBS.: eu uso o devc++.

abaixo a função.

int Visualiza (void)

{

int i;

char palavra[15];

FILE *visualiza;

if ((visualiza = fopen ("animais.txt", "r")) == NULL)

{

Forca ();

gotoxy (39,12); textcolor (12); textbackground (3);

printf ("ERRO!\n");

gotoxy (25,17);

printf ("N%co foi poss%cvel ler o arquivo!\n", -58, -95);

fflush(stdin);

getch ();

}

else

{

Retangulo ();

textcolor (15); textbackground (1); gotoxy (6,4);

printf (" ANIMAIS ");

do{

fflush (stdin);

fgets (palavra, 15, visualiza);

for (i = 0; i < 60; i++) // for para controlar a impressão das strings.

{

if (i <= 15)

{

gotoxy (10,7); textcolor (0); textbackground (3);

fflush (stdin);

strupr (palavra);

puts (palavra);

}

} // fim do laço for

}

while (!feof (visualiza));

}

gotoxy (22,25); textcolor (14); textbackground (3);

printf (" Pressiona qualquer tecla para voltar \n");

getch ();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×