-
Posts
19 -
Cadastrado em
-
Última visita
Reputação
0-
@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?
-
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 ?
-
@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);"
-
@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:
-
@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); }
-
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); }
-
Está complicado rapaziada, não consegui entender a lógica pra conseguir excluir o resgistro do arquivo. Alguém consegue me dar um help?
-
@Mauro Britivaldo Cada dia aprendendo um pouquinho! Struct é um pouco complexa, vi várias formas de declarar ela, estou me adaptando a melhor forma;
-
@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?
-
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...
-
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(); }
-
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.
-
Excelente vou ler. A questão a) ficou bem clara.
-
Mauro, está ficando mais claro sim... Sua didática é excelente. Pode me esclarecer a utilização do comando unsigned para declarar as variáveis?
-
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