Ir ao conteúdo
  • Cadastre-se

Problemas de filtragem em arquivo binário


XNandaX

Posts recomendados

Boa noite pessoal!

 

Este é um trabalho da faculdade onde preciso simular um celular em arquivo binário. Precisa de login, registro de usuários, envio e recebimento de mensagens, agenda de contatos com todas as manutenções, e várias outras validações.

 

O problema é o seguinte: 

Primeiro faço o registo de alguns usuários: maria, joão, carlos, bia e josé com seus respectivos dados e senha.

 

Todos os usuários com seus dados ficam no arquivo "USUARIOS.DAT" e as relações usuário-contato precisam ficar em apenas um arquivo que no caso nomeei de "AGENDA.DAT" onde utilizo duas variáveis RegA.identificadordono (login do usuário) e RegA.identificadorcolega(login do contato) para saber quem é o contato de quem e que servirão como filtragem.

Até ai tudo correto, o problema vem agora:

 

Faço o login com a maria e insiro por exemplo o joão, carlos e josé. Na hora de exibir aparece os três lá certinho, mas quando eu deslogo e entro com outro usuário, exemplo o joão e insiro um contato pra ele, na hora de exibir o relatório, este não aparece nada, mas lá no arquivo AGENDA.DAT foi gravado corretamente. Depois eu entro de novo com a maria e tento inserir outro contato, exemplo bia e vou exibir, só aparece o joão, carlos e josé, mas no arquivo AGENDA.DAT a bia está lá.

Acredito que seja algum problema com endereçamento de ponteiro, como se o contato de um usuário ficasse por cima do outro na exibição...já fiz de tudo mas não consigo fazer essa filtragem, preciso de uma luz =(

 

Segue abaixo o meu código, o problema está no módulo RelatorioContatos().

 

 struct TpUsuarios{    char login[10], senha[10], nome[30], email[30], fone[15], dia[3], mes[3];    int status;}; struct TpAgenda{    char identificadordono[10], identificadorcolega[10];}; int Executa();void InserirContato(FILE *ArqUsuarios,FILE *ArqAgenda,char auxlogindono[10]);void RelatorioContatos(FILE *ArqUsuarios,FILE *ArqAgenda,char auxlogindono[10]); //Declarações  int BuscaRegistroLogin(FILE *ArqUsuarios, char auxlogin[10]) //Verificar se login existe{TpUsuarios RegU;rewind(ArqUsuarios);fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    while(!feof(ArqUsuarios) && !(stricmp(auxlogin,RegU.login)==0 || stricmp(auxlogin,RegU.email)==0 ||    stricmp(auxlogin,RegU.fone)==0))       fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);if(stricmp(auxlogin,RegU.login)==0 || stricmp(auxlogin,RegU.email)==0 || stricmp(auxlogin,RegU.fone)==0)  return (ftell(ArqUsuarios)/sizeof(TpUsuarios))-1;else  return -1;} int BuscaRegistroSenha(FILE *ArqUsuarios, char auxsenha[10]) //Verificar se login existe{TpUsuarios RegU;rewind(ArqUsuarios);fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    while(!feof(ArqUsuarios) && stricmp(auxsenha,RegU.senha)!=0)       fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);if(stricmp(auxsenha,RegU.senha)==0)  return (ftell(ArqUsuarios)/sizeof(TpUsuarios))-1;else  return -1;} int VerificaLoginSenha(FILE *ArqUsuarios, char auxlogin[10], char auxsenha[10]) //Verificar se senha existe{    int i=0;    TpUsuarios RegU;    rewind(ArqUsuarios);    fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    while(i<!feof(ArqUsuarios) && !(stricmp(RegU.login,auxlogin)==0 || stricmp(RegU.email,auxlogin)==0    || stricmp(RegU.fone,auxlogin)==0))       fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    if((RegU.login || RegU.email || RegU.fone) && stricmp(RegU.senha,auxsenha)==0)       return i;    else       return -1;} int Menu1(){    system("cls");        Relogio();    textcolor(10);    gotoxy(30,1);printf("### SISTEMA CELULAR ###\n");    textcolor(15);    printf("\n1-Login");    printf("\n2-Registro");    printf("\n\n[ESC]-Sair");    int opcao1=getch();} int Menu3(){    system("cls");    printf("### MENU ###\n");    printf("\n1-Inserir Contato");    printf("\n2-Atualizar Contato");    printf("\n3-Buscar Contato");    printf("\n4-Excluir Contato");    printf("\n5-Limpar Dados");    printf("\n6-Relatório");    int opcao3=getch();} void Login(FILE *ArqUsuarios, FILE *ArqAgenda, FILE *ArqMsg){    TpUsuarios RegU;    int poslogin, posloginsenha, opcao2, opcao3, opcao4;    char auxlogindono[10], auxsenhadono[10];    ArqUsuarios=fopen("USUARIOS.DAT","rb+");    system("cls");    printf("### LOGIN DE USUÁRIO ###\n");    printf("\nDigite o login: ");fflush(stdin);gets(auxlogindono);    if(strcmp(auxlogindono,"\0")!=0)    {        poslogin=BuscaRegistroLogin(ArqUsuarios,auxlogindono);        fseek(ArqUsuarios,poslogin*sizeof(TpUsuarios),0);        fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        printf("\nUsuário: %s",RegU.nome);        printf("\n\nDigite a senha: ");fflush(stdin);gets(auxsenhadono);        while(strcmp(auxlogindono,"\0")!=0)        {            posloginsenha=VerificaLoginSenha(ArqUsuarios,auxlogindono,auxsenhadono);            if(posloginsenha!=-1)            {                printf("\nLogado com sucesso!");                Sleep(1500);                do                {                    system("cls");                    printf("### MENU ###\n");                    printf("\n1-Agenda");                    printf("\n2-Mensagens");                    printf("\n3-Aniversariantes do Mês");                    printf("\n4-Relatório");                    printf("\n\n[ESC]-Deslogar");                    int opcao2=getch();                     switch(opcao2)                    {                        case '1':                            opcao3=Menu3();                            switch(opcao3)                            {                                case '1':                                    InserirContato(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '2':                                    /*AtualizarContato(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '3':                                    ConsultarContato(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '4':                                    ExcluirContatoLogico(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '5':                                    ExcluirContatoFisico(ArqUsuarios,ArqAgenda,auxlogindono);                                break;*/                                case '6':                                    RelatorioContatos(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                            }                            break;                        case 27:                            system("cls");                            printf("\n\nDeslogado!");                            Sleep(1500);                            Executa();                        break;                    }                }while(opcao2!=27);            }            else            {                printf("\nSenha incorreta!");                Sleep(2000);            }            system("cls");            printf("### LOGIN DE USUÁRIO ###\n");            printf("\nDigite a senha novamente: ");fflush(stdin);gets(auxsenhadono);        }    }    Executa();    fclose(ArqUsuarios);} void InserirContato(FILE *ArqUsuarios, FILE *ArqAgenda, char auxlogindono[10]) //Aqui é onde faço a inserção dos contatos na                                                                                                                                           agenda{    TpUsuarios RegU;    TpAgenda RegA;    int poslogincol;    char auxlogincol[10];    ArqUsuarios=fopen("USUARIOS.DAT","rb");    ArqAgenda=fopen("AGENDA.DAT","ab+");    system("cls");    rewind(ArqAgenda);    printf("### INSERIR CONTATOS ###\n");    printf("\nDigite o login: ");fflush(stdin);gets(auxlogincol);    if(strcmp(auxlogincol,"\0")!=0)    {        poslogincol=BuscaRegistroLogin(ArqUsuarios,auxlogincol);        if(poslogincol!=-1)        {            fseek(ArqUsuarios,poslogincol*sizeof(TpUsuarios),0);            fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);            printf("Nome:%s",RegU.nome);            printf("\nDia e mês do aniversário:%s/%s",RegU.dia,RegU.mes);            printf("\nE-mail: ",RegU.email);            printf("\nTelefone:%s",RegU.fone);            printf("\n\nDeseja inserir este contato(S/N)?");            if(toupper(getche())=='S')            {                strcpy(RegA.identificadordono,auxlogindono);                strcpy(RegA.identificadorcolega,auxlogincol);                fwrite(&RegA,sizeof(TpAgenda),1,ArqAgenda);                 printf("\n\nContato inserido com sucesso!");                Sleep(2000);             }         }    }    fclose(ArqAgenda);    fclose(ArqUsuarios);} void RelatorioContatos(FILE *ArqUsuarios, FILE *ArqAgenda, char auxlogindono[10]) //Exibição dos contatos{    TpUsuarios RegU;    TpAgenda RegA;    bool achou;    ArqUsuarios=fopen("USUARIOS.DAT","rb");    ArqAgenda=fopen("AGENDA.DAT","rb");    system("cls");    printf("### RELATÓRIO DE CONTATOS ###\n");    printf("\nNome \t DataNasc \t E-mail \t Telefone \t Status");    rewind(ArqAgenda);fread(&RegA,sizeof(TpAgenda),1,ArqAgenda);    while(!feof(ArqAgenda) && strcmp(RegA.identificadordono,auxlogindono)==0)    {        achou=false;        rewind(ArqUsuarios);fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        while(!feof(ArqUsuarios) && achou==false)        {            if(strcmp(RegA.identificadorcolega,RegU.login)==0)            {                printf("\n%s \t %s/%s \t\t %s \t %s \t\t %d",RegU.nome, RegU.dia, RegU.mes,                RegU.email, RegU.fone, RegU.status);                achou=true;            }            fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        }        fread(&RegA,sizeof(TpAgenda),1,ArqAgenda);    }    getch();    fclose(ArqAgenda);    fclose(ArqUsuarios);} int Executa(){    FILE *ArqUsuarios;    FILE *ArqAgenda;    FILE *ArqMsg;    int opcao1;    do    {        opcao1=Menu1();        switch(opcao1)        {            case '1':                Login(ArqUsuarios,ArqAgenda,ArqMsg);            break;            case '2':                RegistroUsuarios(ArqUsuarios);            break;            case '3':                RelatorioUsuarios(ArqUsuarios);            break;        }    }while(opcao1!=27);} int main(){    setlocale(LC_ALL,"Portuguese");     Executa();}
Link para o comentário
Compartilhar em outros sites

oi,nao entendi,o problema ta no módulo RelatorioContatos ou na função RelatorioContatos?fica difícil debugar um programa que ja ta grande sem todas as funções ainda,se puder passar todas as funções pra eu poder ver aqui no compilador o que ta acontecendo,ajudaria

Link para o comentário
Compartilhar em outros sites

Módulo é a mesma coisa que função em C.

Estou com problema na hora exibir os contatos da pessoa que está logada que está no módulo RelatorioContatos()

 

Exemplo:

Começando o programa apenas com usuários registrados, logando pela primeira vez e inserindo pela primeira vez:

Se eu logar com a maria e adicionar joao e marcos, ao exibir o relatório irão aparecê-los...até ai ok.

Deslogando e logando com o joao, se eu adicionar a maria e o marcos nos seus contatos e exibir, estes não aparecem...

Ai se eu volto a logar na maria e adicionar outro contato pra ela, na hora de exibir este também não aparece, só os que eu tinha adicionado antes, no caso joao e marcos.

Verificando o arquivo gerado AGENDA.DAT as relações usuários-contato estão gravadas corretamente, logo o problema está mesmo em exibir.

 

A ideia é exibir apenas os contatos que o usuário logado inseriu na sua agenda.

Maria adiciona João, Marcos e José. Precisa aparecer no relatório João, Marcos e José.

João adiciona Maria, Bia e Carlos. Precisa aparecer no relatório Maria, Bia e Carlos.

 

Segue o código completo agora:

 

 

#include <stdio.h>#include <conio2.h>#include <ctype.h>#include <stdlib.h>#include <string.h>#include <Windows.h>#include <time.h>#include <locale.h> struct TpUsuarios{    char login[10], senha[10], nome[30], email[30], fone[15], dia[3], mes[3];    int status;}; struct TpAgenda{    char identificadordono[10], identificadorcolega[10];};  int Executa();void InserirContato(FILE *ArqUsuarios,FILE *ArqAgenda,char auxlogindono[10]);void RelatorioContatos(FILE *ArqUsuarios,FILE *ArqAgenda,char auxlogindono[10]); //Declarações  int BuscaRegistroLogin(FILE *ArqUsuarios, char auxlogin[10]) //Verificar se login existe{    TpUsuarios RegU;    rewind(ArqUsuarios);    fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        while(!feof(ArqUsuarios) && !(stricmp(auxlogin,RegU.login)==0 || stricmp(auxlogin,RegU.email)==0 ||        stricmp(auxlogin,RegU.fone)==0))           fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    if(stricmp(auxlogin,RegU.login)==0 || stricmp(auxlogin,RegU.email)==0 || stricmp(auxlogin,RegU.fone)==0)      return (ftell(ArqUsuarios)/sizeof(TpUsuarios))-1;    else      return -1;} int BuscaRegistroSenha(FILE *ArqUsuarios, char auxsenha[10]) //Verificar se login existe{    TpUsuarios RegU;    rewind(ArqUsuarios);    fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        while(!feof(ArqUsuarios) && stricmp(auxsenha,RegU.senha)!=0)           fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    if(stricmp(auxsenha,RegU.senha)==0)      return (ftell(ArqUsuarios)/sizeof(TpUsuarios))-1;    else      return -1;} int VerificaLoginSenha(FILE *ArqUsuarios, char auxlogin[10], char auxsenha[10]) //Verificar se senha existe{    int i=0;    TpUsuarios RegU;    rewind(ArqUsuarios);    fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    while(i<!feof(ArqUsuarios) && !(stricmp(RegU.login,auxlogin)==0 || stricmp(RegU.email,auxlogin)==0    || stricmp(RegU.fone,auxlogin)==0))       fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    if((RegU.login || RegU.email || RegU.fone) && stricmp(RegU.senha,auxsenha)==0)       return i;    else       return -1;}  int Menu1(){    system("cls");    textcolor(10);    gotoxy(30,1);printf("### SISTEMA CELULAR ###\n");    textcolor(15);    printf("\n1-Login");    printf("\n2-Registro");    printf("\n\n[ESC]-Sair");    int opcao1=getch();} int Menu3(){    system("cls");    printf("### MENU ###\n");    printf("\n1-Inserir Contato");    printf("\n2-Atualizar Contato");    printf("\n3-Buscar Contato");    printf("\n4-Excluir Contato");    printf("\n5-Limpar Dados");    printf("\n6-Relatório");    int opcao3=getch();}  void Login(FILE *ArqUsuarios, FILE *ArqAgenda){    TpUsuarios RegU;    int poslogin, posloginsenha, opcao2, opcao3, opcao4;    char auxlogindono[10], auxsenhadono[10];    ArqUsuarios=fopen("USUARIOS.DAT","rb+");    system("cls");    printf("### LOGIN DE USUÁRIO ###\n");    printf("\nDigite o login: ");fflush(stdin);gets(auxlogindono);    if(strcmp(auxlogindono,"\0")!=0)    {        poslogin=BuscaRegistroLogin(ArqUsuarios,auxlogindono);        fseek(ArqUsuarios,poslogin*sizeof(TpUsuarios),0);        fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        printf("\nUsuário: %s",RegU.nome);        printf("\n\nDigite a senha: ");fflush(stdin);gets(auxsenhadono);        while(strcmp(auxlogindono,"\0")!=0)        {            posloginsenha=VerificaLoginSenha(ArqUsuarios,auxlogindono,auxsenhadono);            if(posloginsenha!=-1)            {                printf("\nLogado com sucesso!");                Sleep(1500);                do                {                    system("cls");                    printf("### MENU ###\n");                    printf("\n1-Agenda");                    printf("\n2-Mensagens");                    printf("\n3-Aniversariantes do Mês");                    printf("\n4-Relatório");                    printf("\n\n[ESC]-Deslogar");                    int opcao2=getch();                     switch(opcao2)                    {                        case '1':                            opcao3=Menu3();                            switch(opcao3)                            {                                case '1':                                    InserirContato(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '2':                                    /*AtualizarContato(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '3':                                    ConsultarContato(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '4':                                    ExcluirContatoLogico(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                                case '5':                                    ExcluirContatoFisico(ArqUsuarios,ArqAgenda,auxlogindono);                                break;*/                                case '6':                                    RelatorioContatos(ArqUsuarios,ArqAgenda,auxlogindono);                                break;                            }                            break;                        case 27:                            system("cls");                            printf("\n\nDeslogado!");                            Sleep(1500);                            Executa();                        break;                    }                }while(opcao2!=27);            }            else            {                printf("\nSenha incorreta!");                Sleep(2000);            }            system("cls");            printf("### LOGIN DE USUÁRIO ###\n");            printf("\nDigite a senha novamente: ");fflush(stdin);gets(auxsenhadono);        }    }    Executa();    fclose(ArqUsuarios);} void RegistroUsuarios(FILE *ArqUsuarios){    TpUsuarios RegU;    int poslogin;    char auxlogin[10], auxsenha[10];    ArqUsuarios=fopen("USUARIOS.DAT","ab+");    system("cls");printf("### CADASTRO DE USUÁRIO ###\n");printf("\nDigite um login: ");fflush(stdin);gets(auxlogin);    if(strcmp(auxlogin,"\0")!=0){   poslogin=BuscaRegistroLogin(ArqUsuarios,auxlogin);if(poslogin!=-1){            printf("\nJá existe um registro com esse login cadastrado!\n");   Sleep(2000);}        else        {   strcpy(RegU.login,auxlogin);            printf("\nDigite o nome: ");fflush(stdin);gets(RegU.nome);       printf("\nDigite o e-mail: ");fflush(stdin);gets(RegU.email);printf("\nDigite o telefone: ");fflush(stdin);gets(RegU.fone);printf("\nDigite o dia do aniversário: ");fflush(stdin);gets(RegU.dia);printf("\nDigite o mês do aniversário: ");fflush(stdin);gets(RegU.mes);printf("\nDigite uma senha: ");fflush(stdin);gets(RegU.senha);RegU.status=1;            fwrite(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);printf("\nRegistrado com sucesso!\n");            Sleep(1500);}    }    fclose(ArqUsuarios);} void RelatorioUsuarios(FILE *ArqUsuarios){    TpUsuarios RegU;    ArqUsuarios=fopen("USUARIOS.DAT","rb");    system("cls");    printf("### RELATÓRIO DE USUÁRIOS ###\n");    printf("\nLogin \t Nome \t E-mail \t Telefone \t Dia \t Mês \t Senha\n");    fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    while(!feof(ArqUsuarios))    {        printf("%s \t %s \t %s \t %s \t\t %s \t %s \t %s\n", RegU.login, RegU.nome, RegU.email, RegU.fone,        RegU.dia, RegU.mes, RegU.senha);        fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);    }    getch();    fclose(ArqUsuarios);} void InserirContato(FILE *ArqUsuarios, FILE *ArqAgenda, char auxlogindono[10]) //Aqui é onde faço a inserção dos contatos na                                                                                                                                           agenda{    TpUsuarios RegU;    TpAgenda RegA;    int poslogincol;    char auxlogincol[10];    ArqUsuarios=fopen("USUARIOS.DAT","rb");    ArqAgenda=fopen("AGENDA.DAT","ab+");    system("cls");    rewind(ArqAgenda);    printf("### INSERIR CONTATOS ###\n");    printf("\nDigite o login: ");fflush(stdin);gets(auxlogincol);    if(strcmp(auxlogincol,"\0")!=0)    {        poslogincol=BuscaRegistroLogin(ArqUsuarios,auxlogincol);        if(poslogincol!=-1)        {            fseek(ArqUsuarios,poslogincol*sizeof(TpUsuarios),0);            fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);            printf("Nome:%s",RegU.nome);            printf("\nDia e mês do aniversário:%s/%s",RegU.dia,RegU.mes);            printf("\nE-mail: ",RegU.email);            printf("\nTelefone:%s",RegU.fone);            printf("\n\nDeseja inserir este contato(S/N)?");            if(toupper(getche())=='S')            {                strcpy(RegA.identificadordono,auxlogindono);                strcpy(RegA.identificadorcolega,auxlogincol);                fwrite(&RegA,sizeof(TpAgenda),1,ArqAgenda);                 printf("\n\nContato inserido com sucesso!");                Sleep(2000);             }         }    }    fclose(ArqAgenda);    fclose(ArqUsuarios);}  void RelatorioContatos(FILE *ArqUsuarios, FILE *ArqAgenda, char auxlogindono[10]) //Exibição dos contatos{    TpUsuarios RegU;    TpAgenda RegA;    bool achou;    ArqUsuarios=fopen("USUARIOS.DAT","rb");    ArqAgenda=fopen("AGENDA.DAT","rb");    system("cls");    printf("### RELATÓRIO DE CONTATOS ###\n");    printf("\nNome \t DataNasc \t E-mail \t Telefone \t Status");    rewind(ArqAgenda);fread(&RegA,sizeof(TpAgenda),1,ArqAgenda);    while(!feof(ArqAgenda) && strcmp(RegA.identificadordono,auxlogindono)==0)    {        achou=false;        rewind(ArqUsuarios);fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        while(!feof(ArqUsuarios) && achou==false)        {            if(strcmp(RegA.identificadorcolega,RegU.login)==0)            {                printf("\n%s \t %s/%s \t\t %s \t %s \t\t %d",RegU.nome, RegU.dia, RegU.mes,                RegU.email, RegU.fone, RegU.status);                achou=true;            }            fread(&RegU,sizeof(TpUsuarios),1,ArqUsuarios);        }        fread(&RegA,sizeof(TpAgenda),1,ArqAgenda);    }    getch();    fclose(ArqAgenda);    fclose(ArqUsuarios);} int Executa(){    FILE *ArqUsuarios;    FILE *ArqAgenda;    int opcao1;    do    {        opcao1=Menu1();        switch(opcao1)        {            case '1':                Login(ArqUsuarios,ArqAgenda);            break;            case '2':                RegistroUsuarios(ArqUsuarios);            break;            case '3':                RelatorioUsuarios(ArqUsuarios);            break;        }    }while(opcao1!=27);} int main(){    setlocale(LC_ALL,"Portuguese");     Executa();} 
Link para o comentário
Compartilhar em outros sites

o problema é que quando voce le a primeira vez com fread

fread(&RegA,sizeof(TpAgenda),1,ArqAgenda);

e depois faz a comparação

while(!feof(ArqAgenda) && strcmp(RegA.identificadordono,auxlogindono)==0)

ele nao vai entrar no bloco porque o primeiro identificadordono(RegA.identificadordono)gravado no arquivo,vai ser diferente do que foi passado para a função(auxlogindono)no caso é o 2º nome do identificadordono no arquivo,que voce quer ler os contatos,quebrando a condição

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...