Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Chillz

Comparar Strings entre ficheiro e scanf

Mensagens Recomendadas

Chillz

Boa noite malta "porgarmadora",

Tenho um pequeno, gigantesco, problema. É o seguinte: Quero ler uma linha de um file (palavras.txt) e queria comparar com uma string introduzida pelo utilizador (variavel palavra) e depois mandar escrever no console. Ora o codigo que eu tenho é o seguinte:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main ( void )
{
    int x;
    char palavra[6];
    char linha[200];
    static const char filename[]="palavras.txt";
    FILE *file=fopen (filename,"r");
    if (file!=NULL)
    {
       char line [ 128 ];
       scanf (" %s",palavra);
       while (fgets(line,200,filename) != NULL )
       {
           linha=fgets;
           x=strcmp(palavra,fgets);
           if(x!=0)
              {
                  printf("\nNao sao iguisa\n");
              }
         //fputs ( line, stdout );
       }
       fclose ( file );
    }
    else
    {
       printf("ERRO ao ABRIR");
    }
    return 0;
}

O ficheiro é lido linha a linha e é então comparado com o scanf. Não pretendo apresentar, o que se encontra no ficheiro para o ecrã, isto só se a comparação der negativa. Se for positiva então apresentar a palavra comparada. (Tipo um jogo do adivinha).

O problema está localizado na linha 19 pelo o que o compilador me indica. Contudo mesmo sabendo pouco da matéria de C, sei que falta alguma coisa mas não consigo lá chegar, ando em círculos e nunca me sai nada.

Será que me poderiam dar umas luzes ou corrigir o problema?

Obrigado pela a ajuda.

- Chillz -

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Tanto quanto percebi, a linha 19 (linha=fgets;) não faz lá absolutamente nada. Já tens o texto na variável line, pelo que só te resta comparares.

No entanto, tens alguns problemas: declaras a variável line com 128 caracteres, e depois tentas ler 200 caracteres para ela. Devias passar à função fgets a variável linha, que essa sim tem espaço suficiente para a quantidades de dados que pedes para ler.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chillz

TheDark,

Já modifiquei o programa , retirei a linha 19 e substitui o tamanho da variavel (line) para 200 eliminei a variavel (linha) também.

O problema e que não faz o suposto fazer, o porgrama e corrido mas não e executado  bem, crashando após a introdução da palavra para a varialvel (palavra).

obrigado pelas dicas.

- CHillz -

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Talvez porque a variável palavra só pode comportar 6 caracteres. Estás originar um buffer overflow, aumenta o "tamanho" da variável palavra


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chillz

Boa noite,

Obrigado pelas respostas pessoal, mas , por agora, arranjei-me com uma solução mais simples para o problema.

Mas tenho outro entrave. Quero copiar uma linha de uma matriz para um array, mas não me lê só a linha mas sim a matriz toda colocando-a no array. Aqui vai o main() para poderem ver. A matriz vai estar preenchida através da função preencher.

int main()
{
    init_matriz();
    char pala[DIM];
    int i,j,k;
    int linha;
    int contador;
    char *p1[6], *p2[6];

    preencher();
    print_matriz(1);
    printf ("\n");
    print_matriz(2);



    for (i=0;i<DIM;i++){
        for(j=0;j<DIM;j++){
            do
            {
                printf("Insira a linha que pretende preencher: ");
                scanf(" %d",&linha);
            }while((linha<0)&&(linha>5));

            printf("Introduza a Palavra: ");
            scanf(" %s",pala);
            for(k=(linha-1);k<DIM;k++){
                for (j=0;j<DIM;j++){
                    p1[6]=matriz1[k][j];
                }
           }
           stringcmp(&pala,&p1);
                  
        }
    }


return 0;
}

Uma imagem para perceberem o que apresenta na console:

compstringfail.jpg

Encontram-se alguns comentários mas qe nao teem muita importancia para o caso concreto, pois o problema no codigo todo reside na parte seguinte ao comentario "problema aqui"

Colocarei aqui o projecto quando este estiver finalizado, para dizerem o que podia ter feito de outra forma. Não o faço agora pois somos um grupo e não e minha intenção fazer tudo e eles ficarem a "olhar para o ar"! ;).

Penso que coloquei o Topic na zona errada. :3

Abraço e obrigado mais uma vez,,

- Chillz -

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Vê se isto te ajuda:

int mat[3][3];
int arr[3];
int l;
int c;
for(l=0;l<3;l++){
    for(c=0;c<3;c++) {
mat[l][c] = c * l;
    }
}
printf("Qual é a linha: ");
scanf("%i", &l);
for(c=0; c<3; c++) {
    arr[c] = mat[l][c];
}
for(c=0; c<3; c++) {
    printf("Elemento[%d]: %i\n", c,arr[c]);
}


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.