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

rgcouto

Comparar conteúdo de ficheiros

10 mensagens neste tópico

Tenho este código:

#include <stdio.h>

int main()
{
    FILE *f;
    char s[1000];
    char user[8] = "rgcouto";

    f=fopen("test.txt","r");
    if (!f)
        return 1;
    while (fgets(s,50,f)!=NULL) {

        printf("%s",s);	
if (s == user){
	 printf ("aqui ->");
}
    }
    fclose(f);
    return 0;
}

E um ficheiro test.txt com este texto:

asdasdasd

rgcouto

asdasdads

asdasd

Quando executo o programa na consola o output é o seguinte:

rgcouto@rgcouto-desktop:~/teste$ ./a.out

asdasdasd

rgcouto

asdasdads

asdasd

rgcouto@rgcouto-desktop:~/teste$

Supostamente depois de escrever rgcouto nao deveria escrever logo á frente "aqui ->" ?!? Porque é k isto acontece, daqui a nada tenho a cabeça feita em água, pq nao encontro o erro :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não porque em C strings não se comparam assim (strings em C são cadeias de caracteres, referenciadas por um apontador).

Quando fazes "s == user" estás a comparar endereços de memória (procura por: C pointers no Google).

Para isso funcionar tens de fazer include da biblioteca <string.h> e chamar a função "strcmp"

#include <string.h>

..

if (strcmp(s, user) {
 printf ("aqui ->");
}
..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

int main()
{
    FILE *f;
    char s[1000];
    char user[8] = "rgcouto";

    f=fopen("test.txt","r");
    if (!f)
        return 1;
    while (fgets(s,50,f)!=NULL) {
if (*s == *user){
	 printf ("aqui ->");
}
        printf("%s",s);	

    }
    fclose(f);
    return 0;
}

com aquele strcmp nao funcionou, mas dps como falas-te em apontadores lembrei-me de fazer isto, et voilá ;) funcionou hehe

thx pela ajuda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que isso apenas vai comparar o primeiro caracter de cada uma das strings.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não porque em C strings não se comparam assim (strings em C são cadeias de caracteres, referenciadas por um apontador).

Quando fazes "s == user" estás a comparar endereços de memória (procura por: C pointers no Google).

Para isso funcionar tens de fazer include da biblioteca <string.h> e chamar a função "strcmp"

#include <string.h>

..

if (strcmp(s, user) {
 printf ("aqui ->");
}
..

Na verdade ele tem que fazer:

if (strcmp(s,user))==0

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na verdade ele tem que fazer:

if (strcmp(s,user))==0

ya, mas para isso tenho k chamar o <cstring>, e dps quando arranco com o programa ele diz que nao encontra a llivraria :/ como é k faço para instalar a livraria?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ya, mas para isso tenho k chamar o <cstring>, e dps quando arranco com o programa ele diz que nao encontra a llivraria :/ como é k faço para instalar a livraria?

<cstring> é em C++. Em C chama-se <string.h>.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas msm assim nao funciona :/

já fiz umas alterações:

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

int main()
{
    FILE *f;
    char s[50];
    char user[50];


   printf( "Enter your name: " );
   scanf( "%s", user );


    f=fopen("test.txt","r");
    if (!f)
        return 1;
    while (fgets(s,50,f)!=NULL) {
if (strcmp (s, user) == 0){
	 printf ("aqui ->");
}
        printf("%s",s);	

    }
    fclose(f);
    return 0;
}

o ficheiro de texto continua a ter os msm valores:

asdasdasdas

rgcouto

asd

asdasdasd

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema está na leitura da string "user" através do scanf.

Eu utilizei o seguinte código para ler:

fgets(user,50,stdin);

É a mesma coisa de ler a partir do ficheiro, só que neste caso o ficheiro é o stdin (ficheiro associado ao standard input, neste caso o teclado).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema está na leitura da string "user" através do scanf.

Eu utilizei o seguinte código para ler:

fgets(user,50,stdin);

É a mesma coisa de ler a partir do ficheiro, só que neste caso o ficheiro é o stdin (ficheiro associado ao standard input, neste caso o teclado).

nice :P já funciona

thx Baderous B)

0

Partilhar esta mensagem


Link 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