Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Chillz

Comparar Strings entre ficheiro e scanf

Recommended Posts

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 -

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 -

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 -

Share this post


Link to post
Share on other 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

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
Sign in to follow this  

×

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.