prea 0 Denunciar post Postado Setembro 18, 2008 ola a todos ... to com um código aqui que estou tendo problema.. esse é um exercicio da secretária aqui da empresa que faz SI , ai pediu minha ajuda .. ai estou a fazer o exercicio pra ela.. só que não so programador C .. ai li algumas apostilas aqui e fiz isso .. mais to com algumas duvidas.. algumas coisas estão funcionando e como dizem no POG .. se ta funcionando não mecha! CODE //===| Chamada de Bibliotecas |================================================ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <conio.h> //===| Estrutura de Dados |==================================================== typedef struct aluno{ int Matricula; char Nome[40]; char Sexo; char Nascimento[11]; struct aluno *Prox, *Ante; }; typedef struct Lista { struct aluno *inicio, *fim; int total; }; //===| Variáveis Globais |====================================================== Lista L; int Opcao; //===| Procedimentos e Funções |================================================ void inicializaLista(struct Lista *lista){ /* Procedimento que prepara a Lista L para a execução do programa. Essa lista é esvaziada. */ lista->inicio = NULL; lista->fim = NULL; lista->total = 0; printf("\n\n =====> Lista Esvaziada e pronta para receber alunos <====\n\n"); } //===| inserir alunos|========================================================= void insereAluno(struct Lista *li){ /* Procedimento que insere um novo aluno na Lista L de maneira que a Lista permaneça ordenada por número de matricula. */ //variáveis locais: struct aluno *novo, *atual, *anterior; //criação de novo REGISTRO (struct) de aluno apontado por NOVO: novo = (aluno *)malloc(sizeof(aluno)); //Cadastro do ALUNO pelo USUARIO-FINAL (Entrada de Dados): system("CLS"); printf("\n\n\n ==========| INSERE ALUNO |==========\n\n"); printf(" Matricula: "); scanf("%d", &novo->Matricula); printf("\n\n Nome: "); gets(novo->Nome); gets(novo->Nome); printf("\n\n Sexo (M ou F): "); scanf("%c", &novo->Sexo); printf("\n\n Nascimento (dd/mm/aaaa): "); gets(novo->Nascimento); gets(novo->Nascimento); //Inclusão do REGISTRO (struct) na Lista L: if ((li->inicio == NULL) && (li->fim == NULL)){ //A Lista L está vazia: este registro será o único. li->inicio = novo; li->fim = novo; li->total = 1; novo->Prox = NULL; novo->Ante = NULL; } else { //A Lista L não está vazia: iniciar busca na Lista para identificar ponto de inserção ... atual = li->inicio; //atual aponta para o primeiro aluno da lista. while (atual != NULL){ if (atual->Matricula > novo->Matricula) { //Deve-se inserir o NOVO registro antes do apontado por ATUAL if (atual == li->inicio) { //inserir antes do primeiro registro: inserir no INICIO novo->Prox = atual; novo->Ante = NULL; atual->Ante = novo; li->inicio = novo; novo = NULL; //controle para saber se novo foi inserido } else { //inserir no meio da Lista L novo->Prox = atual; anterior = atual->Ante; novo->Ante = anterior; atual->Ante = novo; anterior->Prox = novo; novo = NULL; //controle para saber se novo foi inserido }//if-else }//if atual = atual->Prox; }//while if (novo != NULL){ //inserindo no final da Lista L. novo->Prox = NULL; novo->Ante = li->fim; anterior = li->fim; anterior->Prox = novo; li->fim = novo; }//if }//if-else printf("\n\n\n ===| Aluno INSERIDO com SUCESSO |===\n\n\n"); system("PAUSE"); } void listarAlunos(Lista li){ /* Procedimento que exibe Matricula e Nome de todos os ALUNOS que fazem parte da Lista L. */ struct aluno *atual; system("CLS"); printf("\n\n\n =====| Listagem de Alunos |=====\n\n\n"); atual = li.inicio; while (atual != NULL){ printf(" %d - %s\n", atual->Matricula, atual->Nome); atual = atual->Prox; //atual move para o seguinte registro de aluno }//while printf("\n\n"); system("PAUSE"); } void listarAlunosSexo(Lista li){ /* Procedimento que exibe Matricula e Nome de todos os ALUNOS por Sexo. */ char escsexo; struct aluno *atual; atual = li.inicio; system("CLS"); printf("\n\n\n =====| Listagem de Alunos Por Sexo |=====\n\n\n"); printf("\n\n Selecione o sexo M ou F:\n"); escsexo = getch(); while (atual != NULL){ if(escsexo == atual->Sexo){ printf(" %d - %s\n",atual->Matricula,atual->Nome); } atual = atual->Prox; //fecha o if }//fecha o while printf("\n\n"); system("PAUSE"); } void pesquisamatricula(Lista li){ // Procedimento para pesquisar na lista os alunos por matricula int pesqmatricula; struct aluno *atual; atual = li.inicio; system("CLS"); printf("\n\n\n =====| Pesquisar aluno por Matricula |=====\n\n\n"); printf("\n\n Digite o numero da Matricula:"); scanf("%d",&pesqmatricula); while (atual != NULL){ if(pesqmatricula == atual->Matricula){ printf(" %d - %s - %c - %s\n",atual->Matricula,atual->Nome,atual->Sexo,atual->Nascimento); }//fecha o if atual = atual->Prox; } printf("\n\n"); system("PAUSE"); } void pesquisanomecompleto(Lista li){ //procedimento para pesquisa na lista por nome completo char nomecompleto[40]; struct aluno *atual; atual = li.inicio; system("CLS"); printf("\n\n\n =====| Pesquisar aluno por Nome Completo |=====\n\n\n"); printf("\n\n Digite o nome Completo do aluno:"); gets(nomecompleto); //gets(nomecompleto); while (atual != NULL){ if(nomecompleto == atual->Nome){ printf(" %d - %s - %c - %s\n",atual->Matricula,atual->Nome,atual->Sexo,atual->Nascimento); } else{ printf("não foi encontrado nenhum aluno com este nome"); // printf(atual->Nome); }//fecha o if atual = atual->Prox; } printf("\n\n"); system("PAUSE"); } int Menu(){ /* Função de Menu que permite ao usuário-final selecionar a opção desejada. */ //variável local: int op; system("CLS"); printf("\n\n\n =====| M E N U |=====\n\n"); printf(" 0 - Sair (Encerrar Aplicativo)\n\n"); printf(" 1 - INSERIR novo ALUNO.\n"); printf(" 2 - LISTAR todos os ALUNOS.\n"); printf(" 3 - LISTAR ALUNOS por SEXO.\n"); printf(" 4 - CONSULTAR ALUNO por Matricula.\n"); printf(" 5 - CONSULTAR ALUNO por Nome Completo.\n"); printf(" 6 - CONSULTAR ALUNO por TRECHO de Nome.\n"); printf(" 7 - EXCLUIR ALUNO.\n\n\n"); printf(" SELCEIONE OPCAO ==> "); scanf("%d", &op); if ((op > 7) || (op < 0)){ printf("\n\n\n ERRO - Opcao INVALIDA !!!"); printf("\n\n Tente Outra Vez !\n\n\n"); system("PAUSE"); } return op; } //===| Programa Principal |==================================================== int main(){ inicializaLista(&L); do { Opcao = Menu(); switch (Opcao){ case 1: insereAluno(&L); break; case 2: listarAlunos(L); break; case 3: listarAlunosSexo(L); break; case 4: pesquisamatricula(L);break; case 5: pesquisanomecompleto(L);break; }//switch } while (Opcao != 0); } isso é tudo que fiz até gora as opções do menu 1,2,3 e 4 estão funcionando.. estou com problema na opção 5 que é pesquisar pelo nome.. eu achei q seria o mais facil .. mais não to conseguindo nem a ***.. mais poo não tenho conhecimento quase nenhum em C .. e consegui fazer mta coisa.. acho q até coisa mais dificil do que essa pesquisa.. mais fazer oq .. já tentei usar scanf , gest .. mais na hora de usar o if pra comparar com os cadastrados não encontra.. como eu faço essa comparação alguem pode me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 18, 2008 utilize o strcmp(); para comparar strings... + verifique os '\n' q ficam nas strings as vzs isso enche viw... sempre finalize as strings com '\0' []'s Compartilhar este post Link para o post Compartilhar em outros sites
prea 0 Denunciar post Postado Setembro 18, 2008 humm... pesquisei sobre este codigo aqui.. seria então assim if(strcmp(nomecompleto,atual->Nome)== 0) ai se os 2 forem igual o strcmp vai me retornar 0 ...e vai rodar oque eu quero? se é isso que entendi Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 18, 2008 isso msm, + faça + simples: if(!strcmp(nomecompleto,atual->nome)) []'s Compartilhar este post Link para o post Compartilhar em outros sites
prea 0 Denunciar post Postado Setembro 18, 2008 nesta parte do codigo para pesquisar por codigo .. eu tinha colocao para pegar a letra que o usuario clicar.. com o comando getch()... só que isso fica mto ruim .. então coloquei como achei que deveria ser.. que seria um scanf("%c",escsexo); mais se eu coloco sem o & antes de escsexo o programa fecha.. e se coloco com o & ele passa direto sem o usuario poder escrever nada.. e outra duvida.. para pesquisar por parte do nome da pessoa como se faz.. no sql se usa o comando LIKE .. mais aqui como uma string é um vetor de caracteres .. então já não é igual.. então eu teria que fazer um for no nome da pessoa pra ver caracter por caracter? mais acho q isso seria mto complicado .. pq se eu pesquisa-se no nome Renato a parte ato.. CODE void listarAlunosSexo(Lista li){ /* Procedimento que exibe Matricula e Nome de todos os ALUNOS por Sexo. */ char escsexo; struct aluno *atual; atual = li.inicio; system("CLS"); printf("\n\n\n =====| Listagem de Alunos Por Sexo |=====\n\n\n"); printf("\n\n Selecione o sexo M ou F:\n"); scanf("%c",escsexo); while (atual != NULL){ if(escsexo == atual->Sexo){ printf(" %d - %s\n",atual->Matricula,atual->Nome); } atual = atual->Prox; //fecha o if }//fecha o while printf("\n\n"); system("PAUSE"); } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 18, 2008 1º - antes do scanf, coloque um "getchar();" 2º - veja http://www.cplusplus.com/reference/clibrar...ing/strstr.html, http://www.cplusplus.com/reference/clibrar...ing/strchr.html :thumsup: []'s Compartilhar este post Link para o post Compartilhar em outros sites
prea 0 Denunciar post Postado Setembro 19, 2008 poo valeu ..deu tudo certo aqui.. agora to quebrando a cabeça pra fazer a exclusão.. mais vo tentar aqui.. vlw pela ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 19, 2008 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif qlqr coisa abre outro tópico e go lah! []'s Compartilhar este post Link para o post Compartilhar em outros sites