Ir ao conteúdo
  • Cadastre-se

Maicon Dall Agnol

Membro Júnior
  • Posts

    12
  • Cadastrado em

  • Última visita

Tudo que Maicon Dall Agnol postou

  1. Era essa mesmo hahahah, eu estava com a lista já salva, assim ele não chegava a entrar no while por causa da verificação inicial...Mas agora está funcionando perfeitamente!!Alem disso essa verificação anterior vai me servir em outros aspectos pois é um projeto de uma agenda bem completa, é um trabalho de faculdade que tive que fazer a agenda em vetor, depois modifica-lá para alocação dinâmica e agora era em arquivos..então vai ter bem mais funções e dados cadastrados como endereço,aniversario,outros números de telefone,etc..E essa verificação vai me ajudar a mostrar se a lista está vazia deixando ela visualmente melhor! Esse era o protótipo para agora eu começar a implementar no principal (Agora é que vai vir os bugs mesmos)..Mas muitíssimo obrigado pela ajuda, realmente me salvou!
  2. Eu tentei usar seu programa mas ele não esta cadastrando os contatos, e nem mostrando os que ja estavam cadastrados. Até entendi o que você quis fazer mas assim como os outros erros também não entendi o motivo do erro
  3. #include <stdio.h> #include <conio.h> #include <string.h> #include <locale.h> #include <stdlib.h> typedef struct Pessoa { char nome[255],telefone[12]; }pessoa; //FUNÇÕES void fun_cad(FILE *arq); void fun_menu(FILE *arq); void fun_mostra(FILE *arq); void fun_exclui(FILE *arq); int main(int argc, char const *argv[]) { FILE *arq; arq= fopen("contatos.txt","a+"); setlocale(LC_ALL,""); fun_menu(arq); fclose(arq); } void fun_menu(FILE *arq) { int op; do { do { system("cls"); printf("1-Cadastro\n"); printf("2-Mostrar\n"); printf("3-Excluir\n"); printf("0-Sair\n"); printf("OPÇÃO: "); scanf("%d",&op); }while(op<0); switch(op) { case 1: fun_cad(arq); break; case 2: fun_mostra(arq); break; case 3: fun_exclui(arq); break; } }while(op!=0); } void fun_cad(FILE *arq) { int op; pessoa cad; char aux[2]="\n"; printf("Nome: "); fflush(stdin); gets(cad.nome); printf("Telefone: "); fflush(stdin); gets(cad.telefone); printf("Deseja cadastrar o contato? \n"); scanf("%d",&op); if(op==1) { strcat(aux,cad.nome); strcpy(cad.nome,aux); strcpy(aux,"\n"); strcat(aux,cad.telefone); strcpy(cad.telefone,aux); strcpy(aux,"\n"); fputs(cad.nome,arq); fputs(cad.telefone,arq); } } void fun_mostra(FILE *arq) { rewind(arq); pessoa mos; char str[254]; fgets(mos.nome,254,arq); system("cls"); while(!feof(arq)) { fgets(mos.nome,254,arq); printf("\t\tNome: "); puts(mos.nome); fgets(mos.telefone,254,arq); printf("\t\tTelefone: "); puts(mos.telefone); printf("----------------------------------------------\n"); } getch(); } void fun_exclui(FILE *arq) { int ver=0; char nome[255],cha; pessoa excl; FILE *aux=fopen("auxiliar.dat","w"); rewind(arq); fgets(excl.nome,254,arq); fputs("\n",aux); system("cls"); printf("Nome a ser excluido: "); fflush(stdin); gets(nome); strcat(nome,"\n"); while(!feof(arq)) { fgets(excl.nome,254,arq); fgets(excl.telefone,11,arq); if(strcmp(nome,excl.nome)==0) ver=1; else { fputs(excl.nome,aux); fputs(excl.telefone,aux); } } puts(excl.telefone); if(ver==1) { printf("CONTATO EXCLUIDO COM SUCESSO"); fclose(arq); fclose(aux); remove("contatos.txt"); rename("auxiliar.dat","contatos.txt"); arq=fopen("contatos.txt","a+"); } else { printf("Contato não encontrado\n"); fclose(aux); remove("auxiliar.dat"); } fclose(aux); getch(); } Esse é o código que foi mais funcional que é colocando o \n antes do nome mas causa o problema da mesma forma..Tenta compilar e executar, ai cadastra 2 contatos e depois excluir o segundo, no caso o ultimo contato, que vai ver o problema quando for mostrar os nomes e telefones
  4. Faça algo assim: #include <stdio.h> #include <stdlib.h> //Essa biblioteca e a time são necessarias para as funções #include <time.h> int main(){ int a,n1=10,n2=50,n3=1; srand(time(NULL)); //É para gerar um numero aleatorio todas as vezes que abrir o programa do { a=rand() % 100; // Vai gerar o numero entre 0 e 99 }while(a==n1 || a==n2 || a==n3); //Vai sorteando até que o "a" não seja um número que eu defini printf("%d",a); }
  5. Encontrei alguns erros no seu código e fui comentando e arrumando: #include <stdio.h> #include <string.h> #include <locale.h> #define MAX 100 /*Uma constante para não ter que ficar alterando cada valor toda vez que for mudar tudo*/ int main(){ int op, achou, codigo, i,tam=0 /*Contador para saber o numero de prod. cadastrado*/; char op_sub; setlocale(LC_ALL,""); //Usado para poder colocar acentos struct{ int codigo; char nome[30]; int quantidade; float preco; } produto[MAX]; do { printf("Digite o nome do produto: "); scanf("%s",produto[tam].nome); getchar(); do{ printf("Digite o codigo do produto: ( 0 ao 100 ) "); scanf("%d",&codigo); achou=0; for (i=0;i<=tam;i++) { if( codigo == (produto[i].codigo)) { achou=1; printf("\nJa existe cliente cadastrado com este codigo\n"); } } }while(achou==1); produto[tam].codigo=codigo; //Se ele saiu do while é porque não há codigo cadastrado então você tem que jogar o codigo no vetor tam++; //Se saiu do while então acrescenta 1 no tamanho para o proximo looping do{ printf("Digite o preco sugerido: "); scanf("%f",&produto[tam].preco); if(produto[tam].preco<=0) puts("Valor invalido"); }while(produto[tam].preco<0); do{ printf("Digite6 a quantidade contida no estoque: "); scanf("%d",&produto[tam].quantidade); if(produto[tam].quantidade<=0) puts("Valor invalido"); }while(produto[tam].quantidade<0); printf("\n\nDeseja cadastrar outro produto sim(S) ou não(N)? "); fflush(stdin); scanf("%c",&op_sub); //Tinha uns getchar aqui que não são necessarios } while ((op_sub == 's' || op_sub == 'S') && tam!=MAX/*Verifica se ja esta completa a lista de produtos*/); return 0; } Por exemplo você não tinha um controle de tamanho do vetor então como você ia adicionar um novo produto no fim do vetor? Use o próprio tamanho dele pois no fim de cada looping ele vai ter um novo espaço vazio para o próximo cadastro. E adicionei outras coisas como o locale para acentuar e a constante MAX para nao ficar editando o tamanho maximo em tudo todas as vezes.
  6. A função exit(1) é da biblioteca stdlib é só adicionar o exit(1) onde você quer e colocar o #include <stdlib.h> que vai funcionar
  7. Eu recebo o dado que a pessoa digita, concateno ele com um "\n" e depois coloco no arquivo...E cheguei a fazer desse modo que disse colocando o "\n" antes do nome ficando assim \nMaicon por exemplo só que existe um problema..Quando o programa joga pra dentro do arquivo ele vai se organizar assim: Só que minha agenda tem diversas funções como exemplo, mostrar todos os contatos, mostrar todos os dados de um contato buscado, e a função excluir com contato, sendo que nesta acaba causando problema. Quando vou excluir um contato do meio ou do começo ele apenas exclui normalmente (estou fazendo a exclusão copiando todas linhas que não tem o nome do contato), mas o problema fica se eu excluir o ultimo contato, pois após a exclusão o penúltimo nome guarda o \n ficando assim: o que acaba voltando para o problema anterior de sobrar um \n no final do arquivo, causando o problema de duplicação. Eu até pensei um modo de corrigir isso que seria apagando o ultimo \n após a exclusão do ultimo nome, mas não consegui uma forma de apagar apenas ele.
  8. Estou tendo dificuldades com a leitura e escrita de string em C. Tenho um trabalho que necessito fazer um cadastro de um número indefinido de pessoas (tipo uma agenda) em que deve ser cadastrado nome, telefone,etc..e como em arquivo existe as funções de strings que leem uma linha até a quebra de linha, eu faço a pessoa digitar os dados e no final de cada coisa eu acrescento um "\n"...Mas, quando vou recuperar esses arquivos para a leitura, como era de se esperar o ultimo contato cadastrado possui um "\n" sobrando, e na hora de mostrar ele acaba sendo um problema que acaba duplicando o ultimo contato...Então gostaria de saber se existe outra forma em melhor de agrupar esses dados para leitura e gravação pois dessa forma não estou encontrando uma solução para este problema.
  9. Acabei resolvendo graças ao MassakiMsk que mostrou esse outro jeito de receber conteúdo na struct : gets((testando+*tam)->nome); , só uma coisa que mudei foi que passei por referencia ficando assim : gets((*testando+*tam)->nome); pois do outro jeito não compilava. Problema resolvido então, muito obrigado a todos que se dispuseram a ajudar!
  10. Poderia demonstrar como ficaria? Não entendi muito bem o que quis dizer.
  11. Esse é um protótipo do meu programa que na realidade é bem maior, e nele eu testei o contador e ele esta normal, o problema é bem estranho mesmo porque cheguei a testar ele em varias maquinas diferentes e cada hora travava em um lugar. Eu cheguei a resolver o problema dele declarando o typedef struct Teste teste[100]; apenas como typedef struct Teste teste; e declarando o vetor dentro do main, mas não consegui passar ele por referencia. É um trabalho de faculdade que já esta 70% pronto, só falta essa parte de preencher certinho o vetor.
  12. Estou fazendo um trabalho em C e eventualmente o programa crasha sem motivo aparente, já cheguei até perguntar pra professora do curso que também não soube o que estava acontecendo então fiz um protótipo de como estou fazendo que também esta apresentando o mesmo erro : #include <stdio.h> #include <conio.h> struct Teste { char nome[100]; }; typedef struct Teste teste[100]; void fun_teste(teste *testando,int *tam); void fun_mostra(teste *teste_mostrando,int *tam); int main () { teste teste_main; int tam=0; fun_teste(&teste_main,&tam); } void fun_teste(teste *testando,int *tam) { do { fflush(stdin); printf("Complete com um nome: "); gets(testando[*tam]->nome); (*tam) = (*tam) + 1; }while(*tam<5); fun_mostra(&(*testando),&(*tam)); } void fun_mostra(teste *teste_mostrando,int *tam) { int i; for(i=0;i<*tam;i++) { puts(teste_mostrando[*tam]->nome); } getch(); } Fiz uma struct que é chamada em vetor e passado para o main, que é passada para o fun_teste, ele compila certinho mas quando executo ele, ele salva a primeira e segunda vez mas na terceira ele trava; Se alguém puder me ajudar, podem editar como for melhor para passar o vetor ou como melhorar essas passagem, fiquem a vontade!

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!