denin
Membros-
Total de itens
3 -
Registro em
-
Última visita
Sobre denin
denin's Achievements
0
Reputação
-
cara muito obrigado, você me ajudou muito realmente eu estou me enrolando muito nesses parametros '&' '*' não to sabendo muito bem usar, mas vou dar uma estudada nisso, vou terminar as outras rotinas qualquer coisa eu te peço outras ajudas se for possivel vlw fera abrass
-
o primeiro problema relacionado ao foto do cursor estar ignorando o cadastro do nome foi resolvido com o codigo que você me falou, mt obrigado porém o 2° problema na hora de listar o nome e telefone do usuario ainda continua conforme você disse, eu tentei tirar o operando '&', porem na hora de compilar o compilador acusa o seguinte erro: C:\Documents and Settings\Denis Andrade\Meus documentos\testes\começo.c In function `Cadastro': 67 C:\Documents and Settings\Denis Andrade\Meus documentos\testes\começo.c [Warning] passing arg 2 of `strcpy' makes pointer from integer without a cast 67 C:\Documents and Settings\Denis Andrade\Meus documentos\testes\começo.c [Warning] passing arg 2 of `strcpy' makes pointer from integer without a cast fazendo novamente outro teste ao cadastrar nome: junior telefone : 123 na hora de listar o programa esta apresentando na tela: j1j (mt estranho) segue todo o codigo é o programa que tenho que fazer sobre listas estatica ainda tenho que implementar outras rotinas, porem estou tendo problemas na rotina de listagem, e quero resolver esse problema primeiro pra depois partir para proximas rotinas //Programa exemplo de implementacao de Lista Encadeada Estatica //Autor: Prof. Alessandro de Castro Borges //Data: fevereiro de 2011 #include <stdio.h> //Bibliotecas #include <stdlib.h> //ESTRUTURAS typedef struct { //Definindo a estrutura do no char nome[50]; char tel[15]; //O campo onde será armazenada a informação do no int prox; //O apontador para o próximo no da lista } Tno; //O nome do tipo associado ao no - Tno typedef struct { //Definindo a estrutura da lista, com vetor, prim e dispo Tno l[100]; //Vetor de nos int prim; //Apontador para o primeiro elemento da lista int dispo; //Apontador para o primeiro no disponivel para insercao } Tlista; //Nome do tipo associado aa lista - Tlista Tlista list; //Declaração da lista a ser usada no programa int i; //Variável para uso como indice char c; //Variavel auxiliar para aguardar o pressionar do <ENTER> //ROTINAS void iniciaLista(Tlista *lista) { for(i=0; i<99; i++) {lista->l.prox = i+1;} //cada no aponta seu proximo lista->l[9].prox = -1; //Ultimo no aponta como proximo o final da lista lista->prim = -1; //Primeiro elemento aponta vazio (lista vazia) lista->dispo = 0; //Primeiro disponivel aponta primeiro no do vetor } int cheia(Tlista lista) //Rotina que verifica se uma lista esta cheia //Parametro de entrada: a lista a ser verificada //Parametro de saida: inexistente //Retorno: retorna 1 se estiver cheia, e 0 caso contrario { if(lista.dispo == -1) return(1); //Se a lista esta cheia, não há no disponivel else return(0); } int vazia(Tlista lista) //Rotina que verifica se uma lista esta vazia //Parametro de entrada: a lista a ser verificada //Parametro de saida: inexistente //Retorno: retorna 1 se estiver vazia, e 0 caso contrario { if(lista.prim == -1) return(1); //Uma lista vazia não possui primeiro elemento else return(0); } void Cadastro(Tlista*lista, char sujeito, char fone) { int p; p = lista->dispo; lista->dispo = lista->l[lista->dispo].prox; lista->l[p].prox = lista->prim; lista->prim = p; strcpy(lista->l[p].nome, &sujeito); strcpy(lista->l[p].tel, &fone); } void imprimeLista(Tlista lista) //Rotina para impressao da lista na tela //Parametro de entrada: a lista a ser impressa //Parametro de saida: inexistente //Retorno: inexistente - funcao void { int p; //Variavel auxiliar que percorre a lista para imprimir as informacoes p = lista.prim; //A partir do primeiro elemento... while (p != -1) { //Enquanto não encontra o final da lista... printf("%s", lista.l[p].nome);//Imprime cada elemento, e printf("%s", lista.l[p].tel); p = lista.l[p].prox; //Salta para o proximo no } //Fim do while(p != -1) } int menu(void) //Rotina para apresentacao do menu e leitura da opcao do usuario //Parametro de entrada: inexistente //Parametro de saida: inexistente //Retorno: o numero da opcao escolhida pelo usuario { int opcao; do { system("cls"); //Limpa a tela - biblioteca <stdlib.h> printf("Listas Encadeadas Implementadas Estaticamente\n"); //Titulo do menu printf("Programa de Testes e Aprendizado\n\n"); printf("MENU\n\n"); printf(" 1 - Cadastrar participante\n"); printf(" 3 - Listar todos os participantes\n"); printf(" 7 - Sair\n"); printf("\n\nOpcao: "); scanf("%d", &opcao); if((opcao<1)||(opcao>7)) { //Caso o usuario digite uma opcao invalida printf("\n\nOpcao '%d' invalida! Escolha entre <1> e <11>.\n", opcao); printf("\nTecle <ENTER> para continuar e tentar novamente..."); c = getche(); } } while((opcao<1)||(opcao>7)); //Repete ate ler uma opcao valida return(opcao); } main (void) //Programa Principal { int op; //Variavel para receber a opcao do menu iniciaLista(&list); //Inicialização da lista com todos os nos disponiveis do { op = menu(); //Chamada da rotina do menu switch(op){ case 1: //Opcao de insercao de um elemento no inicio da lista if (cheia(list)) printf("ERRO! Lista cheia. Impossivel inserir."); else { char sujeito[50]; char fone[15]; printf("\nDigite o nome a ser cadastrado: "); fflush(stdin); // <------------- limpa o buffer de entrada gets (sujeito); printf("\n"); printf("\nDigite o telefone: "); fflush(stdin); // <------------- limpa o buffer de entrada gets (fone); printf("\n"); Cadastro(&list, *sujeito, *fone); printf("Insercao realizada com sucesso!\n"); } break; case 3://IMPRIME if (vazia(list)) printf("\nLista vazia! não há elementos para imprimir.\n"); else { imprimeLista(list); printf("\n\nImpressao concluida!\n"); } break; case 7: //Opcao de saida do programa printf("\nATENCAO! Tem certeza de que deseja sair do programa?\n"); printf("Para confirmar, tecle (S) ou (s): "); c = getche(); //Pedido de confirmacao if((c == 's') || (c == 'S')) { iniciaLista(&list); //Se confirmado, o programa é encerrado printf("\n\nFIM DE PROGRAMA.\n"); } else { printf("\n\nOperacao não confirmada - acao cancelada\n"); op++; //Alteracao do valor da opcao para diferenciar de 7 (saida) } break; } //Fim do switch(op) printf("\npressione <ENTER> para continuar..."); c = getche(); printf("\n"); } while(op != 7); //Repete o processo ate ser escolhida a opcao de saida - 9 printf("Tecle <ENTER> para encerrar\n"); c = getche(); } //Fim do programa.
-
olá galera, sou novato na linguagem C e estou com dois problemas pra criar um programa tenho que fazer uma lista para cadastrar nome e telefone de usuarios, e criar rotinas para cadastro de usuario, remoção de usuario, listagem e busca por usuario. o primeiro problema está quando solicito ao usuario o nome e telefone a ser cadastrado, atraves desse codigo case 1: if (cheia(list)) printf("ERRO! Lista cheia. Impossivel inserir."); else { char sujeito[50]; char fone[15]; printf("\nDigite o nome a ser cadastrado: "); gets (sujeito); printf("\n"); printf("\nDigite o telefone: "); gets (fone); printf("\n"); Cadastro(&list, *sujeito, *fone); printf("Insercao realizada com sucesso!\n"); } break; rotina de cadastro que é chamada: void Cadastro(Tlista*lista, char sujeito, char fone) { int p; p = lista->dispo; //dispo é a posição disponivel lista->dispo = lista->l[lista->dispo].prox; // prox é o proxima posição lista->l[p].prox = lista->prim; // prim é a posição q inicia a lista lista->prim = p; strcpy(lista->l[p].nome, &sujeito); // copiando o nome q usuario digitou para a lista strcpy(lista->l[p].tel, &fone); //copiando o telefone que o usuario digitou para a lista } porem ao executar, na tela aparece: Digite o nome a ser cadastrado: Digite o telefone: *o problema é que o cursor para apos a palavra telefone, ignorando o cadastro do nome e pulando para linha de baixo esperando o usuario cadastrar o telefone, o que pode ser isso? _____________ o segundo problema esta na listagem, quando o usuario escolhe a opçao de listagem. o programa deveria apresentar o nome e telefone de todos os usuarios cadastrados, porém o programa apenas apresenta o primeiro caracter do telefone, a rotina de listagem do codigo é a seguinte: void imprimeLista(Tlista lista)//ARRUMAR OS 20 DE CADA VEZ //Rotina para impressao da lista na tela //Parametro de entrada: a lista a ser impressa //Parametro de saida: inexistente //Retorno: inexistente - funcao void { int p; //Variavel auxiliar que percorre a lista para imprimir as informacoes int cont = 0; p = lista.prim; //A partir do primeiro elemento... while ((p != -1){ //Enquanto não encontra o final da lista... printf("%s", lista.l[p].nome);//Imprime nome e telefone printf("%s", lista.l[p].tel); p = lista.l[p].prox; //Salta para o proximo no } //Fim do while(p != -1) } Por exemplo se o usuario digita o telefone 123456, na hora de apresentar o telefone na tela, o programa apresenta apenas o primeiro caracter da string ou seja, apresenta o numero '1', galera, sou muito leigo ainda em C, então por favor se puderem paciencia comigo, e ficarei muito grato com qualquer ajuda agradeço desde já