Ir ao conteúdo
  • Cadastre-se

Intruder18

Membro Júnior
  • Posts

    19
  • Cadastrado em

  • Última visita

Reputação

0
  1. @vangodp Eu estava lendo agora mesmo o link que você postou anteriormente, muita coisa me ajudou! Fiquei com dúvida sobre o uso do get e fgets, sempre leio string com eles, e pelo que notei eles armazenam o \n, dessa forma não fica lixo no buffet, seguindo esse raciocinio não tem necessidade de limpar, estou certo?
  2. Bacana pessoal, estou desenrolando bem aqui com as dicas de vocês.. Estou dando uma lida nos tópicos do forum também. Ah, qual a diferença de fflush(stdin) e fflush-in ?
  3. @vangodp estou depurando o seu código tentando entender o que você fez, confesso que desconheço alguns dos termos utilizados por vocês.. O um deles foi ler o nome atráves do "scanf("%50[^\n]%*c", nome);"
  4. @isrnick A Edição funciona sim! Mas o while ainda continua com o erro que mencionei anteriormente: Aqui mostra a lista antes da edição: Status: 1 Nome: Edson CPF: 041 -------------------- Status: 1 Nome: Thais CPF: 042 -------------------- e aqui mostra a lista após a edição: Status: 1 Nome: Edson Júnior CPF: 041 -------------------- Status: 1 Nome: Thais CPF: 042 -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Status: 0 Nome: CPF: -------------------- Perceba que alterar "Edson" para "Edso Junior", porém foi armazenado no arquivo esses Status: 0 com as variaveis vazias:
  5. @vangodp Quando eu peço para editar alguma informação, o programa edita normalmente, mas enche o arquivo com duplicações vazias.. Vou postar o programa todo e faça um teste, cadastre dois contatos usando a opção 1, depois liste os contatos usando a opção dois, por fim teste a opção 3 para editar. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <locale.h> typedef struct contato CONTATO; struct contato { int ativo; char nome[50]; char cpf[30] }; void cadastrar(); void listar(); void editar(); //VARIAVEL UNIVERSAL FILE *arquivo; CONTATO ctt; int op; int main(void) { setlocale(LC_ALL, "Portuguese"); do { system("cls"); printf("\n1 - Cadastrar"); printf("\n2 - Listar"); printf("\n3 - Editar"); printf("\n0 - Sair\n\n"); printf("Digite uma opção: "); scanf("%d", &op); switch(op) { case 1: cadastrar(); break; case 2: listar(); break; case 3: editar(); break; case 0: break; default: printf("Opção Inválida!"); break; } }while(op!=0); } void cadastrar() { do { arquivo = fopen("base.txt","a+b"); system("cls"); fflush(stdin); printf("Nome: "); gets(ctt.nome); fflush(stdin); printf("CPF: "); gets(ctt.cpf); ctt.ativo = 1; fwrite(&ctt, sizeof(CONTATO),1,arquivo); fclose(arquivo); printf("Deseja realizar novo Cadastro (s/n)?"); }while(getche()=='s'); } void listar() { system("cls"); arquivo = fopen("base.txt","rb"); while(fread(&ctt,sizeof(CONTATO),1,arquivo)==1) { printf("Status: %d\n", ctt.ativo); printf("Nome: %s\n",ctt.nome); printf("CPF: %s\n",ctt.cpf); printf("--------------------\n\n"); } fclose(arquivo); getch(); } void editar() { int posicao = 0; // Inicio do Arquivo; int achou = 0; char AltCpf[30]; char AltNome[50]; fflush(stdin); printf("Digite o CPF"); gets(AltCpf); arquivo = fopen("base.txt","r+b"); fseek(arquivo, posicao, SEEK_SET); system("cls"); while(fread(&ctt, sizeof(CONTATO), 1, arquivo)==1) { if(strcmp(AltCpf,ctt.cpf)==0) { printf("\n1 - Nome: %s",ctt.nome); printf("\n2 - CPF: %s",ctt.cpf); printf("\n0 - Voltar"); printf("\n-------------\n\n"); printf("\n\nEscolha uma opção: "); scanf("%d", &op); switch(op) { case 1: fflush(stdin); printf("Digite o Novo nome: "); gets(ctt.nome); fseek(arquivo, posicao, SEEK_SET); achou= fwrite(&ctt,sizeof(CONTATO),1,arquivo) == sizeof(CONTATO); // ajustar posicao em relação ao inicio do arquivo posicao = posicao + sizeof(CONTATO); break; case 2: fflush(stdin); printf("Digite o novo CPF: "); gets(ctt.cpf); fseek(arquivo, posicao, SEEK_SET); achou= fwrite(&ctt,sizeof(CONTATO),1,arquivo) == sizeof(CONTATO); // ajustar posicao em relação ao inicio do arquivo posicao = posicao + sizeof(CONTATO); break; case 0: main(); break; default: printf("\nOpção Inválida!"); break; } } } fclose(arquivo); }
  6. Estou tentando da seguinte forma: Mas aparentemente estou com problemas com o while: void editar() { int posicao = 0; // Inicio do Arquivo; int achou = 0; char AltCpf[30]; char AltNome[50]; fflush(stdin); printf("Digite o CPF"); gets(AltCpf); arquivo = fopen("base.txt","r+b"); fseek(arquivo, posicao, SEEK_SET); system("cls"); while(fread(&ctt, sizeof(CONTATO), 1, arquivo)==1) { if(strcmp(AltCpf,ctt.cpf)==0) { printf("\n1 - Nome: %s",ctt.nome); printf("\n2 - CPF: %s",ctt.cpf); printf("\n0 - Voltar"); printf("\n-------------\n\n"); printf("\n\nEscolha uma opção: "); scanf("%d", &op); switch(op) { case 1: fflush(stdin); printf("Digite o Novo nome: "); gets(ctt.nome); fseek(arquivo, posicao, SEEK_SET); achou= fwrite(&ctt,sizeof(CONTATO),1,arquivo) == sizeof(CONTATO); // ajustar posicao em relação ao inicio do arquivo posicao = posicao + sizeof(CONTATO); break; case 2: fflush(stdin); printf("Digite o novo CPF: "); gets(ctt.AltCpf); fseek(arquivo, posicao, SEEK_SET); achou= fwrite(&ctt,sizeof(CONTATO),1,arquivo) == sizeof(CONTATO); // ajustar posicao em relação ao inicio do arquivo posicao = posicao + sizeof(CONTATO); break; case 0: main(); break; default: printf("\nOpção Inválida!"); break; } } } fclose(arquivo); }
  7. Está complicado rapaziada, não consegui entender a lógica pra conseguir excluir o resgistro do arquivo. Alguém consegue me dar um help?
  8. @Mauro Britivaldo Cada dia aprendendo um pouquinho! Struct é um pouco complexa, vi várias formas de declarar ela, estou me adaptando a melhor forma;
  9. @isrnick Entendi a teoria do que você disse, mas não sei usar a função fseek, poderia me dizer como isso ficaria na pratica?
  10. Entendo amingo, mas ao invés de usar a struct eu poderia criar um vetor com Filme[100],genero[100],ano[100] e lista-los atraves de um indice...
  11. Bom Dia Pessoal, Estou criando um pequeno programa para cadastro de alunos e notas, Já finalizei toda a estrutura de cadastro, listagem dos alunos cadastrados e a pesquisa por nome dos alunos, mas a estrutura de excluir algum registro já criado me deixou sem saída, não consegui aplicar nenhuma solução lógica para corrigir o problema. Alguém conseguiria me ajudar de alguma forma? Segue abaixo o código: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> typedef struct { char nome[50]; float notas[4]; int ativo; int matricula; }Aluno; Aluno ctt; char c; int op; void cabecalho(); void inserir(); void excluir(); void pesquisar(); void listar(); int main(void) { do { cabecalho(); printf("\n1 - Incluir"); printf("\n2 - Excluir"); printf("\n3 - Pesquisar"); printf("\n4 - Listar Todos"); printf("\n0 - Sair\n\n"); printf("Escolha uma opção: "); scanf("%d", &op); switch(op) { case 1: inserir(); break; case 2: excluir(); break; case 3: pesquisar(); break; case 4: listar(); break; case 0: printf("Obrigado pela visita!"); break; default: printf("Opção Inválida"); break; } }while(op!=0); } void cabecalho() { system("cls"); printf("###########################################\n"); printf("# PROGRAMA PARA CADASTRO DE NOTAS #\n"); printf("###########################################\n\n"); } void inserir() { int matricula=1; FILE *arq; arq = fopen("Alunos.txt","ab"); if(arq==NULL) { printf("Error!"); exit(1); } else { do { cabecalho(); ctt.ativo=1; ctt.matricula++; fflush(stdin); printf("Digite o nome: "); gets(ctt.nome); printf("1 - Bimestre: "); scanf("%f", &ctt.notas[0]); printf("2 - Bimestre: "); scanf("%f", &ctt.notas[1]); printf("3 - Bimestre: "); scanf("%f", &ctt.notas[2]); printf("4 - Bimestre: "); scanf("%f", &ctt.notas[3]); fwrite(&ctt,sizeof(Aluno),1,arq); printf("Deseja Cadastrar novo Aluno (s/n)"); }while(getche() =='s'); getchar(); } fclose(arq); } void excluir() { int matriculaP; FILE *arq; arq = fopen("Alunos.txt","a+b"); if(arq==NULL) { printf("Error!"); exit(1); } else { do { cabecalho(); fflush(stdin); printf("\nDigite a matricula a ser pesquisada: "); scanf("%d", &matriculaP); printf("Deseja Fazer nova consulta (s/n)?"); }while(getche()=='s'); getchar(); } fclose(arq); } void pesquisar() { char nomeP[50]; int i; FILE *arq; arq = fopen("Alunos.txt","rb"); if(arq==NULL) { printf("Error!"); exit(1); } else { do { cabecalho(); fflush(stdin); printf("\nDigite o nome a ser pesquisado: "); gets(nomeP); fread(&ctt,sizeof(Aluno),1,arq)==1; if(strcmp(nomeP,ctt.nome)==0) { printf("\n\nStatus: %d",ctt.ativo); if(ctt.ativo == 1) { printf(" - Ativo"); } else { printf(" - Inativo"); } printf("\nMatricula: %d", ctt.matricula); printf("\nNome: %s", ctt.nome); for(i=0;i<4;i++) { printf("\n%d - Bimestre: %f",i+1, ctt.notas[i]); } printf("\n----------------\n\n"); } else { printf("\nNome não encontrado!\n\n"); } printf("Deseja Fazer nova consulta (s/n)?"); }while(getche()=='s'); getchar(); } fclose(arq); } void listar() { cabecalho(); int i; int j=1; FILE *arq; arq = fopen("Alunos.txt","rb"); if(arq==NULL) { printf("Error!"); exit(1); } else { while(fread(&ctt,sizeof(Aluno),1,arq)==1) { if(ctt.ativo == 1) { printf("\nMatricula: %d", ctt.matricula); printf("\nNome: %s", ctt.nome); for(i=0;i<4;i++) { printf("\n%d - Bimestre: %f",i+1, ctt.notas[i]); } printf("\n----------------\n\n"); } }; } fclose(arq); getch(); }
  12. Fala Pessoal! Eu mais uma vez aqui para aprender um pouco mais com meus colegas programadores! Desse vez estou aprendendo um pouco sobre structs e me surgiram algumas dúvidas. Não consegui entender a lógica de declarar uma struct da forma abaixo se podemos apenas declarar as variaveis isoloadas de uma forma mais fácil. abaixo uma struct declarada: typedef struct Aluno ALUNO; struct Aluno { char nome[50]; int notas[4]; }; Porque apenas não declarar as váriaveis sem essa estrutura do structs? char nome[50]; int notas[4]; Me perdoem a ignorância, mas estou tentando aprender tecnicas um pouco mais avançadas.
  13. Excelente vou ler. A questão a) ficou bem clara.
  14. Mauro, está ficando mais claro sim... Sua didática é excelente. Pode me esclarecer a utilização do comando unsigned para declarar as variáveis?
  15. Não conheço essa estrutura, vou pesquisar sim. Agradeço a atenção e apoio.

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!