Ir ao conteúdo
  • Cadastre-se

Jcleber

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

Reputação

2
  1. Pronto!! Resolvido! tinha esquecido de declarar o "contatos.deletado" na funcao incluir.
  2. ola pessoal! tudo bem? estou com uma dúvida agora com relação a Cadastro em C....tenho um código para cadastro de nome e telefone. Após cadastrar dois nomes, utilizo a opção de consultar e/ou alterar, e não consigo fazer com que o código encontre o nome que estou consultando, que no caso já está cadastrado. Creio que seja algum problema na leitura do nome que estou digitando na hora de consultar (fflush(stdin)), ou quando ocorre a comparação de strings o valor nao está sendo ==0, consequentemente me dando a mensagem "Nome não encontrado". Não consigo entender porque, sendo que quando vou consultar eu digito exatamente o mesmo nome que já está cadastrado. segue abaixo o código (P.S.) Caso eu tenha deixado de explicar algo me pergunte que te respondo aqui, grato pela atenção desde já! //PROGRAMA DE CADASTRO DE TELEFONE #include <stdio.h> typedef struct tipoAgenda //STRUCT DECLARACOES DE TIPO { char nome[20]; char telefone[13]; char deletado; //branco = ok, * = deletado }; //PROTOTIPOS DE FUNCOES int menu(void); //Faz o menu void incluir(void); //Inclui um Nome na agenda void listar (void); //listar todos os nomes e telefones void consultar(void); //consultar um numero de telefone pelo nome da pessoa void alterar(void); //alterar o numero de telefone de uma pessoa consultada void excluir(void); //Exclui a pessoa void organizar(void); //Exclusao Fisica int main (void) { //MENU AGENDA int op; do { op = menu(); switch (op) { case 1: //INSERE OS CONTATOS incluir(); break; case 2: //LISTA OS CONTATOS listar(); break; case 3: //CONSULTA OS CONTATOS consultar(); break; case 4: //ALTERAR O TELEFONE DO CONTATO alterar(); break; case 5: excluir(); //EXCLUIR UM CONTATO break; case 6: organizar(); } } while (op !=0); return 0; } //FAZ O MENU int menu(void){ int op; do { printf("\n\n***AGENDA TELEFONICA***\n\n"); printf("1. Incluir\n"); printf("2. Listar\n"); printf("3. Consultar\n"); printf("4. Alterar\n"); printf("5. Excluir\n"); printf("6. Organizar\n"); printf("0. Sair\n"); printf("Escolha sua opcao: "); scanf ("%d",&op); if ((op < 0 )|| (op > 6)) printf("Opcao digitada invalida"); } while ((op < 0)||(op > 6)); return op; } //MENU DE INCLUSAO void incluir(void){ FILE *arq; struct tipoAgenda contatos; printf ("\n\n ***MENU DE INCLUSAO***\n\n"); arq = fopen ("agenda.dat", "a+b"); if (arq == NULL) printf ("Erro de abertura do arquivo agenda.dat!\n"); else{ printf ("Digite o nome: "); fflush(stdin); gets (contatos.nome);//LE O NOME printf ("Digite o numero de telefone: "); gets(contatos.telefone); //LE O TELEFONE fwrite (&contatos, sizeof(contatos), 1, arq); fclose(arq); } } //MENU LISTAR void listar(void) { FILE *arq; struct tipoAgenda contatos; printf ("\n\n***LISTA***\n\n"); arq = fopen("agenda.dat", "rb"); if (arq == NULL) printf ("Erro de abertura no arquivo: agenda.dat"); else{ printf ("\nNome Telefone\n"); printf ("-------------------- -----------\n"); while (fread(&contatos, sizeof(contatos), 1, arq)) printf ("\n%s %s\n",contatos.nome, contatos.telefone); fclose(arq); } } //MENU CONSULTAR PELO NOME void consultar(void){ FILE *arq; struct tipoAgenda contatos; char novonome[20]; int achei = 0; printf ("\n\n***MENU CONSULTAR***\n\n"); arq = fopen("agenda.dat", "rb"); if (arq == NULL) printf ("Erro de abertura no arquivo: agenda.dat"); else{ printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets(novonome); while (fread(&contatos, sizeof(contatos), 1, arq)) { if ((contatos.deletado == ' ') && (strcmp(novonome, contatos.nome)==0)) { //ONDE EU IMAGINO QUE O ERRO ESTEJA ACONTECENDO printf ("Nome: %s\n", contatos.nome); printf ("Telefone: %10s\n", contatos.telefone); achei = 1; } } if (!achei) printf ("Nome não encontrado"); fclose(arq); } } //MENU ALTERAR void alterar(void){ FILE *arq; struct tipoAgenda contatos; char novonome[20]; int achei = 0; printf ("\n\n MENU ALTERAR\n\n"); arq = fopen("agenda.dat", "r+b"); if (arq == NULL) printf ("Erro de abertura no arquivo: agenda.dat"); else { printf ("Digite o nome da pessoa a ser consultada: "); //fflush(stdin); gets (novonome); while (fread(&contatos, sizeof(contatos), 1, arq)) { if ((contatos.deletado == ' ') && (strcmp(novonome, contatos.nome)==0)) { //ONDE EU IMAGINO QUE O ERRO ESTEJA ACONTECENDO printf("Digite o novo numero de telefone: "); fflush(stdin); gets(contatos.telefone); achei = 1; fseek (arq, sizeof(contatos)*-1, SEEK_CUR); fwrite(&contatos, sizeof(contatos), 1, arq); fseek (arq, 0, SEEK_CUR); //Apenas para fixar o ponteiro, pois nao estava funcionando sem esta fixacao } } if (!achei) printf ("\nNome nao encontrado"); fclose(arq); } } //EXCLUI UM CONTATO void excluir(void){ FILE *arq; struct tipoAgenda contatos; char novonome[20]; int achei = 0; printf ("\n\n MENU EXCLUIR\n\n"); arq = fopen("agenda.dat", "r+b"); if (arq == NULL) printf ("Erro de abertura no arquivo: agenda.dat\n"); else{ printf ("Digite o nome da pessoa a ser deletada: "); fflush(stdin); gets (novonome); while (fread(&contatos, sizeof(contatos), 1, arq)) { if ((contatos.deletado == ' ') && (strcmp(novonome, contatos.nome)==0)) { printf ("Nome: %s\n", contatos.nome); printf ("Telefone: %s\n", contatos.telefone); achei = 1; fseek (arq, sizeof(contatos)*-1, SEEK_CUR); contatos.deletado = '*'; fwrite(&contatos, sizeof(contatos), 1, arq); fseek (arq, 0, SEEK_CUR); //Apenas para fixar o ponteiro, pois nao estava funcionando sem esta fixacao } } if (!achei) printf ("Nome nao encontrado"); fclose(arq); } } void organizar(void){ FILE *arq1, *arq2; struct tipoAgenda contatos; printf ("\n\n MENU ORGANIZAR\n\n"); arq1 = fopen("agenda.dat", "rb"); arq2 = fopen("temp.dat", "wb"); if ((arq1 == NULL) || (arq2 == NULL)) printf ("Erro de abertura do arquivo!"); else { while (fread(&contatos, sizeof(contatos), 1, arq1)) if (contatos.deletado == ' ') fwrite(&contatos, sizeof(contatos), 1, arq2); fclose(arq1); fclose(arq2); remove("agenda.dat"); rename("temp.dat", "agenda.dat"); } }
  3. Esqueci de botar "{" no if do case 4 ai somente espava pegando o primeiro comando abaixo do if. segue abaixo o codigo correto //PROGRAMA DE CADASTRO DE TELEFONE #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct tipoAgenda //STRUCT DECLARACOES DE TIPO { char nome[20]; char telefone[13]; }; int main (void) //MENU AGENDA { struct tipoAgenda contatos[MAX]; //Vetor struct para salvar os nomes e telefones int op, i, quantidade=0; char novonome[20]; do { printf("\n\n***AGENDA TELEFONICA***\n\n"); //MOSTRA NA TELA O MENU DE INCLUSAO printf("1. Incluir\n"); printf("2. Listar\n"); printf("3. Consultar\n"); printf("4. Alterar\n"); printf("5. Excluir\n"); printf("0. Sair\n"); printf("Escolha sua opcao: "); scanf ("%d",&op); if ((op < 0 || op > 5)) { printf("Opcao digitada invalida"); } switch (op) { case 1: //INSERE OS CONTATOS if (quantidade<MAX) //PRECISO DE NO MAXIMO 3 CADASTROS PARA REALIZAR OS TESTES { printf ("Digite o nome: "); fflush(stdin); gets (contatos[quantidade].nome);//LE O NOME printf ("Digite o numero de telefone: "); gets(contatos[quantidade].telefone); //LE O TELEFONE quantidade++; } else printf ("Lotou!"); break; case 2: //LISTA OS CONTATOS printf ("\n\n***LISTA***\n\n"); printf ("\nNome Telefone\n"); for (i=0; i<quantidade; i++) { printf ("\n%s %s\n",contatos.nome, contatos.telefone); } break; case 3: //CONSULTA OS CONTATOS printf ("\n\n***CONSULTAR***\n\n"); printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets(novonome); for (i=0; i<quantidade; i++) { if (strcmp(novonome, contatos.nome)==0) { printf ("Nome: %s\n", contatos.nome); printf ("Telefone: %10s\n", contatos.telefone); } } break; case 4: //ALTERAR O TELEFONE DO CONTATO printf ("\n\n***ALTERAR TELEFONE***\n\n"); printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets (novonome); for (i=0; i<quantidade; i++) { if (strcmp(novonome, contatos.nome)==0){ printf("Digite o novo numero de telefone: "); fflush(stdin); gets(contatos.telefone); } } } } while (op !=0); return 0 ; }
  4. @louissanabio ta tranquilo ja descobri o erro erro de inciante!! mas se eu nao fosse iniciante eu nao viria ao forum! o que me deixou indignado foi da pessoa copiar o meu codigo exatamente como estava e colar de volta como se tivesse me ajudando (ah tá, ele alterou o valor da constante que nao muda em nada codigo)! ficou parecendo que ele realmente queria ajudar mas colou o codigo errado! mas nao precisava dele ser grosso como ele foi! mas enfim grato pela atenção
  5. @CiroboyBR me desculpe mas voce nao mudou NADA no codigo!! na verdade voce tirou dois "0"s que fizeram o codigo dar errado!
  6. alguma outra pessoa disponivel pra ajudar??
  7. louissanabio, os passos que estou executando sao os seguintes: *Menu de opções aberto digito 1, enter digito flavio, enter digito 1111, enter *Pronto! 1 nome cadastrado! digito 1, enter (pra cadastrar outro nome) digito joao, enter digito 2222, enter *Pronto! 2 nomes cadastrados digito 4, enter (alterar o numero de alguem) *o programa me pergunta qual a pessoa que eu quero mudar o numero digito flavio, enter ****NESSE MOMENTO O PROGRAMA PARA! ****APERTO ENTER NOVAMENTE! *o programa me pergunta qual numero de telefone (novo numero) digito 5555, enter *o programa volta ao menu principal, então peço pra listar os nomes e numeros que estão salvos (para conferir se a alteração foi realizada), E SIM!, é alterado com sucesso, MAS O JOAO FICA SEM NUMERO DE TELEFONE, OU SEJA, O NUMERO DO FLAVIO FOI ALTERADO E O DE JOAO APAGADO! segue abaixo o CODIGO com os comentarios! //PROGRAMA DE CADASTRO DE TELEFONE #include <stdio.h> #define MAX 3 typedef struct tipoAgenda{ //STRUCT DECLARACOES DE TIPO char nome[20]; char telefone[13]; }; int main (void) { //MENU AGENDA struct tipoAgenda contatos[MAX]; //Vetor struct para salvar os nomes e telefones int op, i, quantidade=0; char novonome[20]; do{ printf("\n\n***AGENDA TELEFONICA***\n\n"); //MOSTRA NA TELA O MENU DE INCLUSAO printf("1. Incluir\n"); printf("2. Listar\n"); printf("3. Consultar\n"); printf("4. Alterar\n"); printf("5. Excluir\n"); printf("0. Sair\n"); printf("Escolha sua opÁ„o: "); scanf ("%d",&op); if ((op < 0 || op > 5)){ printf("OpÁ„o digitada inv·lida"); } switch (op) { case 1: //INSERE OS CONTATOS if (quantidade<MAX){ //PRECISO DE NO MAXIMO 3 CADASTROS PARA REALIZAR OS TESTES printf ("Digite o nome: "); fflush(stdin); gets (contatos[quantidade].nome);//LE O NOME printf ("Digite o numero de telefone: "); gets(contatos[quantidade].telefone); //LE O TELEFONE quantidade++; } else printf ("Lotou!"); break; case 2: //LISTA OS CONTATOS printf ("\n\n***LISTA***\n\n"); printf ("\nNome Telefone\n"); for (i=0; i<quantidade; i++){ printf ("\n%s %s\n",contatos.nome, contatos.telefone); } break; case 3: //CONSULTA OS CONTATOS printf ("\n\n***CONSULTAR***\n\n"); printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets(novonome); for (i=0; i<quantidade; i++){ if (strcmp(novonome, contatos.nome)==0){ printf ("Nome: %s\n", contatos.nome); printf ("Telefone: %10s\n", contatos.telefone); } } break; case 4: //ALTERAR O TELEFONE DO CONTATO printf ("\n\n***ALTERAR TELEFONE***\n\n"); printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets (novonome); for (i=0; i<quantidade;i++){ if (strcmp(novonome, contatos.nome)==0) printf("Digite o novo numero de telefone: "); fflush(stdin); gets(contatos.telefone); } } }while (op !=0); return 0; }
  8. Loiussanabio muito obrigado pela ajuda, prometo que colocarei os comentarios para facilitar o entendimento...vou testar aqui sua correção, mas o problema que eu vi era mais na alteração e não na listagem... Ps. Muito bom esse fórum estou impressionado como foi rápido e bem atencioso! Grato
  9. ola, ainda sou iniciante em C, e estou com algumas dúvidas! estou criando um programa de cadastro de telefones, com vetores (sem criação de arquivos ainda), mas estou tendo problemas na opção "Alterar", onde altero um registro no cadastro. Abaixo está meu código (ainda incompleto): Lembrando que o problema que está acontecendo é que após cadastrar 2 pessoas, quando escolho a opção de alterar o numero de telefone da pessoa, o programa me pergunta o nome da pessoa a qual desejo alterar, digito o nome da pessoa, aí o programa me pede pra digitar o novo número de telefone; então eu digito e aperto "enter" mas o programa fica parado, esperando eu apertar "enter" novamente, e mesmo apertando quando vou ver a lista dos nomes e telefones, o número não foi alterado ou foi apagado! #include <stdio.h> #define MAX 4 //declaracoes de tipo typedef struct tipoAgenda{ char nome[20]; char telefone[13]; }; //Prototipos //Menu int main (void) { struct tipoAgenda contatos[MAX]; int op, i, quantidade=0, posicao=0; char novonome[20]; do{ printf("\n\n***AGENDA TELEFONICA***\n\n"); printf("1. Incluir\n"); printf("2. Listar\n"); printf("3. Consultar\n"); printf("4. Alterar\n"); printf("5. Excluir\n"); printf("0. Sair\n"); printf("Escolha sua opÁ„o: "); scanf ("%d",&op); if ((op < 0 || op > 5)){ printf("OpÁ„o digitada inv·lida"); } switch (op) { case 1: if (posicao<MAX){ printf ("Digite o nome: "); fflush(stdin); gets (contatos[posicao].nome); printf ("Digite o numero de telefone: "); gets(contatos[posicao].telefone); posicao++; } else printf ("Lotou!"); break; case 2: printf ("\n\n***LISTA***\n\n"); printf ("\nNome Telefone\n"); for (i=0; i<posicao; i++){ printf ("\n%s %s\n",contatos.nome, contatos.telefone); } break; case 3: printf ("\n\n***CONSULTAR***\n\n"); printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets(novonome); for (i=0; i<posicao; i++){ if (strcmp(novonome, contatos.nome)==0){ printf ("Nome: %s\n", contatos.nome); printf ("Telefone: %10s\n", contatos.telefone); } } break; case 4: printf ("\n\n***ALTERAR TELEFONE***\n\n"); printf ("Digite o nome da pessoa a ser consultada: "); fflush(stdin); gets (novonome); for (i=0; i<posicao;i++){ if (strcmp(novonome, contatos.nome)==0) printf("Digite o novo numero de telefone: "); fflush(stdin); gets(contatos.telefone); } } }while (op !=0); return 0; }

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...