Igor Soares da Paixão
-
Posts
18 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Igor Soares da Paixão
-
-
Olá Senhores(a). Estou com uma dúvida a semanas e não consigo tirar. Estou desenvolvendo um código em C para um trabalho da faculdade e preciso salvar dados de um vetor de struct em arquivo txt e depois acessar eles e mostrar na tela. A struct contém nome, celular, idade. A ideia é salvar várias dados com estas informações, e depois acessá-los individualmente. Como eu faço isso? Exemplos são bem vindos.
-
#include <stdio.h> #include <stdlib.h> #include <locale.h> void main(){ setlocale(LC_ALL, ""); typedef struct{ char nome[15]; int idade; char telefone[12]; }Cpessoa; //Cadastro Pessoa Cpessoa pessoa[10]; int i = 0, menu; FILE *arquivo; arquivo = fopen("pessoa.txt", "ab"); printf("1 - Cadastro\n2 - Consultar\n"); printf("Selecione a opção desejada: "); scanf("%d", &menu); switch(menu){ case 1: fflush(stdin); printf("Digite os dados da pessoa abaixo.\n\n"); printf("Nome: "); fgets(pessoa[i].nome, 15, stdin); printf("Idade: "); scanf("%d", &pessoa[i].idade); fflush(stdin); printf("Telefone: "); fgets(pessoa[i].telefone, 12, stdin); fwrite(&pessoa[i], sizeof(Cpessoa), 1, arquivo); case 2: arquivo = fopen("cadastro_paciente.txt", "rb"); while(fread(&pessoa[i], sizeof(Cpessoa), 1, arquivo)){ printf("%s", pessoa[i].nome); printf("%d", pessoa[i].idade); printf("%s", pessoa[i].telefone); } } }
Está sendo bem difícil kkk, como eu leio os dados e mostro na tela? Não sei se está correto o jeito de gravar também.
- 1
-
Preciso de uma ajuda. Como eu faço para salvar dados de uma struct em txt, ler e mostrar na tela do usuário? Gostaria de salvar nome, idade e telefone. Depois fazer uma busca os dados salvos pelo nome da pessoa. Dá pra fazer isso? Exemplos me ajuda mais a entender.
Valeu!- 1
-
@arfneto Obrigado pela resposta.
- 1
-
Obrigado pelas respostas!!
- 2
-
Pessoal gostaria de saber a diferença entre esses dois comandos. E quando devo usa-los, se puderam colocar um exemplo também facilitaria muito pra mim, obrigado!
- 1
- 1
-
Sim, @arfneto. Obrigado pelas dicas!!
- 1
-
É porque o meu objetivo é gravar os dados em arquivo e depois fazer uma busca do arquivo mas essa busca eu gostaria de fazer por exemplo, pelo nome.
- 1
- 1
-
Entendi@arfneto vou reformular ele todinho..... Só estou tentando buscar os dados da struct individualmente ainda... Mas obrigado pela dica
- 1
-
21 minutos atrás, arfneto disse:
Todos os campos de sua estrutura são char.
- Não há razão pra usar scanf(). Só vai ter problemas. Faça o simples e leia linha a linha com fgets().
- Não leia os dados na rotina que insere. São coisas diferentes. Só vai dar problema.
- Se vai gravar texto apenas, use fprintf() ou fputs(). É muito mais fácil e ainda pode abrir o arquivo de saída no IDE para testar. Não há razão para usar um arquivo binário de texto porque afinal é texto.
- Não há razão para escrever o programa já com 11 onze campos. Teste apenas com dois ou tres. Ninguém vai culpar você. Se acertar com os dois vai acertar com 2 mil. Mas é muito chato testar com onze numa estrutura de incriveis 3K cada uma. Para que? 255 bytes para a cidade está bem até para os nomes da Islândia. mas uns 10 já estriam bem no teste.
-
Se tem um função menu() porque razão não ler a opção lá dentro e retornar??????? É o simples: e tira esse código todo de main()
-
opcao = menu(); switch(opcao) { default: break; }
- main() deve ser a primeira função em seu programa. SEMPRE. Se possível em um arquivo separado.
-
Em geral para percorrer essas estruturas em programas comuns você inicialmente tenta ler um arquivo com o estado inicial dos dados
- depois você carrega o vetor todo para a memória e roda o programa a partir desses dados
- ao final você grava no disco em outro arquivo todos os dados
- muda o nome do arquivo original
-
muda o nome do arquivo gerado para o nome oficial
Strcpy(paciente[contP].carteirinha, "NULL"); strcpy(paciente[contP].cidadeEestado, "NULL"); strcpy(paciente[contP].convenio, "NULL"); ...
Não sei o que pretendia com isso, mas colocar o valor "NULL" é tem estranho. Poderia escrever apenas
paciente[contP].carteirinha = 0;
E seria o equivalente a ter uma string vazia lá. NULL é 0, ou \0Nunca use variáveis globais. Nunca mesmo. É problema e por isso é proibido em muitas empresas e escolas e condenado por todos autores.
Tem algum problema de todos os campos serem char na minha estrutura? Qual formato de variável eu deveria usar para ler um número grande? Tipo o CPF?
- 1
-
Esqueci de colocar ela, perdoe-me..
void menuprincipal(){ setlocale(LC_ALL, ""); // VARIÁVEL PARA ARMAZENAR A OPÇÃO DO MENU int opcao; do{ printf("| MENU PRINCIPAL DO SISTEMA |\n"); printf("1 - Cadastro de pacientes.\n"); printf("2 - Cadastro de médicos.\n"); printf("3 - Consulta de cadastros.\n"); printf("4 - Agendamento de consultas.\n"); printf("5 - Cancelamento de consultas.\n"); printf("6 - Agenda do dia.\n"); printf("7 - Cadastro de funcionários.\n"); printf("8 - Sugestões, reclamações e elogios.\n"); printf("9 - Relatórios.\n"); printf("10 - Sair\n"); printf("Digite a opção desejada: "); scanf("%d", &opcao); system("cls"); switch(opcao){ case 1: cadastroPaciente(); break; case 2: break; case 3: consultaCadastro(); break; case 10: printf("\n\n Finalizando...."); sleep(3); exit(1); default: printf("Opção inválida! Tente Novamente.\n\n"); } }while(opcao!=10);
adicionado 0 minutos depoisEsqueci de colocar ela, perdoe-me.. @devair1010
void menuprincipal(){ setlocale(LC_ALL, ""); // VARIÁVEL PARA ARMAZENAR A OPÇÃO DO MENU int opcao; do{ printf("| MENU PRINCIPAL DO SISTEMA |\n"); printf("1 - Cadastro de pacientes.\n"); printf("2 - Cadastro de médicos.\n"); printf("3 - Consulta de cadastros.\n"); printf("4 - Agendamento de consultas.\n"); printf("5 - Cancelamento de consultas.\n"); printf("6 - Agenda do dia.\n"); printf("7 - Cadastro de funcionários.\n"); printf("8 - Sugestões, reclamações e elogios.\n"); printf("9 - Relatórios.\n"); printf("10 - Sair\n"); printf("Digite a opção desejada: "); scanf("%d", &opcao); system("cls"); switch(opcao){ case 1: cadastroPaciente(); break; case 2: break; case 3: consultaCadastro(); break; case 10: printf("\n\n Finalizando...."); sleep(3); exit(1); default: printf("Opção inválida! Tente Novamente.\n\n"); } }while(opcao!=10);
adicionado 1 minuto depois2 minutos atrás, devair1010 disse:@Gegê82737 esse nem compila e está faltando a função menuprincipal ..
Foi como te falei, o restante do código está funcionando normal só estou me complicando nessa função consultaCadastro(); .....
- 1
-
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> int main(){ setlocale(LC_ALL, ""); printf ("Inicializando sistema..."); sleep(3); system("cls"); login(); return 0; } void login(){ char loginA[7], senhaA[20], dloginA[9]="adminA", dsenhaA[20]="unipadminA"; char loginB[7], senhaB[20], dloginB[9]="adminB", dsenhaB[20]="unipadminB"; char loginC[7], senhaC[20], dloginC[9]="adminC", dsenhaC[20]="unipadminC"; char novasenha[20]; int unidade, redefinir_senha; volta: printf("\nOpções disponíveis: 1, 2 e 3 ou digite 4 para redefinir a senha."); printf("\nEscolha uma das opções disponíveis: "); scanf("%d", &unidade); switch(unidade){ case 1: printf("Você escolheu a unidade %d!\n", unidade); printf("LOGIN: "); scanf("%s",loginA);/*aqui você digita o login*/ printf("SENHA: "); scanf("%s",senhaA);/*aqui você digita a senha*/ if((strcmp(dloginA,loginA) == 0) && (strcmp(dsenhaA,senhaA) == 0)){ printf("\n\nLogin efetuado com sucesso!\n"); }else{ printf("Usuário ou senha inválida!\n\n"); goto volta; }; break; case 2: printf("Você escolheu a unidade %d!\n", unidade); printf("LOGIN: "); scanf("%s",loginB);/*aqui você digita o login*/ printf("SENHA: "); scanf("%s",senhaB);/*aqui você digita a senha*/ if((strcmp(dloginB,loginB) == 0) && (strcmp(dsenhaB,senhaB) == 0)){ printf("\n\nLogin efetuado com sucesso!\n"); } else{ printf("Usuário ou senha inválida!\n\n"); goto volta; }; break; case 3: printf("Você escolheu a unidade %d!\n", unidade); printf("LOGIN: "); scanf("%s",loginC);/*aqui você digita o login*/ printf("SENHA: "); scanf("%s",senhaC);/*aqui você digita a senha*/ if((strcmp(dloginC,loginC) == 0) && (strcmp(dsenhaC,senhaC) == 0)){ printf("\n\nLogin efetuado com sucesso!\n"); } else{ printf("Usuário ou senha inválida!\n\n"); goto volta; } break; case 4: printf("Para redefinir sua senha, digite sua unidade: "); scanf("%d", &redefinir_senha); if(redefinir_senha == 1){ printf("Digite sua nova senha: "); scanf("%s", &novasenha); novasenha == senhaA; printf("Sua senha foi alterada!"); login(); } default: printf("Opção inválida!\n"); goto volta; break; }; printf ("Carregando o sistema..."); sleep(3); system("cls"); menuprincipal(); getch(); } typedef struct{ char nomecompleto[255]; char datanasc[255]; char CPF[255]; char RG[255]; char telefone[255]; char email[255]; char endereco[255]; char cidadeEestado[255]; char validacar[255]; char convenio[255]; char carteirinha[255]; }Cpaciente; Cpaciente paciente[MAXPACIENTES]; int contP = 0; int posicao; void cadastroPaciente(){ setlocale(LC_ALL, ""); FILE *arquivo; arquivo = fopen("cadastro_paciente.bin", "ab"); int dados, retornar, i; char fpag = 'P' || 'C'; char formapag[2]; if(arquivo == NULL){ printf("Erro ao abrir o arquivo."); }; // INICIALIZAÇÃO DA STRUCT EM VETORES //ARMAZENANDO DADOS NAS STRUCT for(contP = 0; contP < MAXPACIENTES; contP++){ printf("Você está na tela de cadastramento de pacientes.\n\n"); fflush(stdin); printf("Digite o CPF: "); fgets(paciente[contP].CPF, 255, stdin); printf("Digite o Nome Completo: "); fgets(paciente[contP].nomecompleto, 255, stdin); // Função que lê o nome printf("Digite a data de nascimento(EX: DD/MM/AAAA): "); fgets(paciente[contP].datanasc, 255, stdin); // Função que lê a data de nasc printf("Digite o CPF novamente: "); fgets(paciente[contP].CPF, 255, stdin); fflush(stdin); printf("Digite o número do RG: "); fgets(paciente[contP].RG, 255, stdin); // Função que lê o RG printf("Digite o número do Telefone/Celular: "); fgets(paciente[contP].telefone, 255, stdin); // Função que lê o num de telefone printf("Digite o email: "); fgets(paciente[contP].email, 255, stdin); // Função que lê o email printf("Digite o endereço completo(EX: Rua, numCasa - Bairro): "); fgets(paciente[contP].endereco, 255, stdin); // Função que lê o endereço printf("Digite a Cidade e o Estado(EX: Cidade/Estado): "); fgets(paciente[contP].cidadeEestado, 255, stdin); printf("Particular ou Convênio? Informe com P ou C: "); scanf("%c", &fpag); // Função que lê a forma de pagamento informada pelo printf fpag = toupper(fpag); if(fpag == 'P'){ printf("Digite D para Dinheiro ou C para Cartão.\n"); printf("Forma de pagamento: "); scanf("%s", formapag); // Função que lê a forma de pagamento informada pelo printf }else if(fpag == 'C'){ printf("Nome do Convênio: "); scanf("%s", paciente[contP].convenio); // Função que lê o nome do convenio printf("Digite o número da carteirinha: "); scanf("%s", &paciente[contP].carteirinha); // Função que lê o num da carteirinha printf("Data de validade da carteirinha(DD/MM/AAAA), não inserir se já estiver vencida!: "); scanf("%s", paciente[contP].validacar); // Função que lê a validade da carteirinha } printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: "); scanf("%d", &dados); if(dados == 1){ fwrite(&paciente[contP], sizeof(Cpaciente), 1, arquivo); contP = contP + 1; fclose(arquivo); printf("O paciente foi cadastrado com sucesso!\n"); }else if(dados == 2){ printf("Os dados não foram cadastrados!\n"); } printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: "); scanf("%d", &retornar); if(retornar == 1){ system("cls"); menuprincipal(); }else if(retornar == 0){ exit(1); } } } void consultaCadastro(FILE *arquivo){ arquivo = fopen("cadastro_paciente.txt","rb"); char CPF[255]; printf("VOCÊ ESTÁ NA TELA DE CONSULTAR CADASTRO\n\n"); printf("Para encontrar o registro, digite o número do CPF: "); fflush(stdin); gets(CPF); const int info = fread(&paciente, sizeof(Cpaciente), MAXPACIENTES, arquivo); if (info != MAXPACIENTES) { /* Gerenciar o erro adequadamente aqui */ printf("ERRO"); } for(contP = 0; contP < MAXPACIENTES; contP++){ if(strcmp(CPF, paciente[contP].CPF)== 0){ printf("Registro encontrado!\n"); posicao = contP; }else{ posicao = -1; } if(posicao = -1) { printf(" \n Registro não encontrado! "); }else{ printf(" \n Registro Encontrado!\n"); printf(": %s", paciente[posicao].CPF); } } }
Aí está o código completo, foi como eu disse sou iniciante em C e me perdoe se não pego essas dicas/sugestões que você me deu fácil.....Verifique se eu estou fazendo da maneira correta.@devair1010
- 1
-
6 horas atrás, V!OLADOR disse:
Talvez o problema esteja na leitura usando dois laços, um for e um while. Não apenas não é necessário como o intuito do programa não fica claro. Por sinal, o retorno de fread não é verdadeiro/falso (ou seja, zero ou diferente de zero com esse propósito específico) mas, sim, o número de elementos lidos do arquivo (eventualmente pode ser zero).
Sabendo de antemão que existe sempre o mesmo número de entradas no arquivo (150), você pode lê-los todos com uma chamada de fread:
const int info = fread(&paciente, sizeof(Cpaciente), MAXPACIENTES, arquivo) if (info != MAXPACIENTES) { /* Gerenciar o erro adequadamente aqui */ }
Depois dessa etapa, você pode checar todos os elementos do vetor paciente procurando pelo cpf do cliente. Ou seja, usando apenas um for.
Edit: Noutra olhadela rápida, e apesar que você de fato não precisa de dois laços, é provável que o erro não esteja ai pelo menos enquanto contP == 0. O próximo candidato a testar seria strcmp.
Fiz isso aí que você me sugeriu mas não consegui o retorno desejado =(
adicionado 2 minutos depois5 horas atrás, devair1010 disse:@Gegê82737 você não postou a função para listar , e então seu código poderia ser assim :
#include <stdio.h> #include <windows.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #define MAXPACIENTES 150 void _Meu_Fflush(); void Listar(); // DADOS DO PACIENTE typedef struct{ char nomecompleto [255]; char datanasc [255]; char CPF [255]; char RG [255]; char telefone [255]; char email [255]; char endereco [255]; char cidadeEestado[255]; char validacar [255]; char convenio [255]; char carteirinha [255]; }Cpaciente; Cpaciente paciente[MAXPACIENTES]; void desenha(int co_i, int li_i, int caract[],int w); void gotoxy_2(int,int); int carac2[70]={ 124,130,130,126, 2,130,124,/* Digito 9 */ // 01111100 --| 124,130,124,130,130,130,124,/* Digito 8 */ // 10000010 | 254, 2, 12, 16, 96, 64, 64,/* Digito 7 */ // 10000010 | 124,128,188,194,130,130,124,/* Digito 6 */ // 01111110 |-- Digito Nove 252,128,252, 2, 2,130,124,/* Digito 5 */ // 00000010 | 28, 36, 68,132,252, 4, 62,/* Digito 4 */ // 10000010 | 124,130, 2, 28, 2,130,124,/* Digito 3 */ // 01111100 --| 124,130, 2, 28, 96,128,252,/* Digito 2 */ 16,112, 16, 16, 16, 16,124,/* Digito 1 */ 56, 68,138,146,162, 68, 56 /* Digito 0 */ }; int contP = 0; int posicao; int cadastroPaciente() { FILE *arquivo; arquivo = fopen("cadastro_paciente.bin", "ab"); int dados, retornar, i; char fpag = 'P' || 'C'; char formapag[2]; if(arquivo == NULL) { printf("Erro ao abrir o arquivo."); }; // INICIALIZAÇÃO DA STRUCT EM VETORES for(contP = 0; contP <MAXPACIENTES; contP++){ strcpy(paciente[contP].carteirinha, "NULL"); strcpy(paciente[contP].cidadeEestado, "NULL"); strcpy(paciente[contP].convenio, "NULL"); strcpy(paciente[contP].CPF, "NULL"); strcpy(paciente[contP].datanasc, "NULL"); strcpy(paciente[contP].email, "NULL"); strcpy(paciente[contP].endereco, "NULL"); strcpy(paciente[contP].nomecompleto, "NULL"); strcpy(paciente[contP].RG, "NULL"); strcpy(paciente[contP].telefone, "NULL"); strcpy(paciente[contP].validacar, "NULL"); } //ARMAZENANDO DADOS NAS STRUCT for(contP = 0; contP < MAXPACIENTES; contP++) { printf("Você está na tela de cadastramento de pacientes.\n\n"); _Meu_Fflush(); printf("Digite o CPF: "); fgets(paciente[contP].CPF, 255, stdin); printf("Digite o Nome Completo: "); fgets(paciente[contP].nomecompleto, 255, stdin); // Função que lê o nome printf("Digite a data de nascimento(EX: DD/MM/AAAA): "); fgets(paciente[contP].datanasc, 255, stdin); // Função que lê a data de nasc printf("Digite o CPF novamente: "); fgets(paciente[contP].CPF, 255, stdin); _Meu_Fflush(); printf("Digite o número do RG: "); fgets(paciente[contP].RG, 255, stdin); // Função que lê o RG printf("Digite o número do Telefone/Celular: "); fgets(paciente[contP].telefone, 255, stdin); // Função que lê o num de telefone printf("Digite o email: "); fgets(paciente[contP].email, 255, stdin); // Função que lê o email printf("Digite o endereço completo(EX: Rua, numCasa - Bairro): "); fgets(paciente[contP].endereco, 255, stdin); // Função que lê o endereço printf("Digite a Cidade e o Estado(EX: Cidade/Estado): "); fgets(paciente[contP].cidadeEestado, 255, stdin); printf("Particular ou Convênio? Informe com P ou C: "); scanf("%c", &fpag); // Função que lê a forma de pagamento informada pelo printf fpag = toupper(fpag); if(fpag == 'P'){ printf("Digite D para Dinheiro ou C para Cartão.\n"); printf("Forma de pagamento: "); scanf("%s", formapag); // Função que lê a forma de pagamento informada pelo printf } else if(fpag == 'C') { printf("Nome do Convênio: "); scanf("%s", paciente[contP].convenio); // Função que lê o nome do convenio printf("Digite o número da carteirinha: "); scanf("%s", &paciente[contP].carteirinha); // Função que lê o num da carteirinha printf("Data de validade da carteirinha(DD/MM/AAAA), não inserir se já estiver vencida!: "); scanf("%s", paciente[contP].validacar); // Função que lê a validade da carteirinha } printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: "); scanf("%d", &dados); if(dados == 1){ fwrite(&paciente[contP], sizeof(Cpaciente), 1, arquivo); contP = contP + 1; fclose(arquivo); printf("O paciente foi cadastrado com sucesso!\n"); } else if(dados == 2) { printf("Os dados não foram cadastrados!\n"); } printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: "); scanf("%d", &retornar); if(retornar == 1) { system("cls"); //menuprincipal(); } else if(retornar == 0) { break; } } } void consultaCadastro() { FILE *arquivo; arquivo = fopen("cadastro_paciente.bin","rb"); char CPF[255]; printf("VOCÊ ESTÁ NA TELA DE CONSULTAR CADASTRO\n\n"); printf("Para encontrar o registro, digite o número do CPF: "); fflush(stdin); gets(CPF); for(contP = 0; contP < MAXPACIENTES; contP++) { while( fread(&paciente[contP], sizeof(Cpaciente), 1, arquivo)) { if(strcmp(CPF, paciente[contP].CPF)== 0) { printf("Registro encontrado!\n"); posicao = contP; } else { posicao = -1; } if(posicao = -1) { printf(" \n Registro não encontrado! "); } else { printf(" \n Registro Encontrado!\n"); printf("CPF: %s", paciente[posicao].CPF); } } } } int main() { int j; cadastroPaciente(); Listar(); printf("\n\n"); int w,px,py,x; /* variáveis simples */ HANDLE hOut; /* controle dos dispositivos do pc */ HBITMAP hb; long lg; hOut= GetStdHandle(STD_OUTPUT_HANDLE); /* pega a saída padrão */ CONSOLE_SCREEN_BUFFER_INFO SBInfo; /* informações sobre a buffer da tela */ GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console */ GetBitmapBits(hb,lg,NULL); px = SBInfo.dwCursorPosition.X; /* pX será a posição da coluna do cursor no console */ py = SBInfo.dwCursorPosition.Y; /* pY será a posição da linha do cursor no console */ gotoxy_2(0,py+20); gotoxy_2(0,py+2 ); for( j=0; j<10; j++ ) desenha(40,py,carac2,j); /* são os dígitos */ printf("\n\n\n\n"); return 32768; } void Listar() { int i; printf("esta no Listar !\n\n"); for(i=0; i<contP; i++) { printf("Nome -------> %s", paciente[i].nomecompleto ); printf("cpf --------> %s", paciente[i].CPF ); printf("celular ----> %s", paciente[i].telefone ); printf("Nascimento -> %s", paciente[i].datanasc ); printf("RG ---------> %s", paciente[i].RG ); printf("Email ------> %s", paciente[i].email ); printf("Endereco ---> %s", paciente[i].endereco ); printf("Cidade -----> %s", paciente[i].cidadeEestado); } } void _Meu_Fflush() { char c; while( c = fgetc(stdin) != '\n'); } void desenha(int co_i, int li_i, int caract[],int w){ int x,y,q,co,li; li=li_i; w *= 7; for(x=0;x<7;x++){ /* linhas */ co=co_i; q=caract[x+w]; for(y=0;y<16;y += 2){ /* colunas */ gotoxy_2(co,li); if(q % 2==0)printf(" "); else printf("%c%c",219,219); co -= 2; q/=2; } li++; } gotoxy_2(70,li_i+7); Sleep(1000); } void gotoxy_2(int x, int y){/*imprimir na linha e coluna desejada */ SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x,y}); }
Eu só estou com problema nessa parte de mandar a função listar(); o restante do código eu fiz e está funcionando normal kk
- 1
-
Como faço para listar as pessoas? Eu armazenei os dados em uma struct e coloquei em arquivo .bin e agora eu quero ler esses dados e imprimir na tela do usuário. Como eu faço? Eu vi num fórum que eu teria que criar um for para "dar o inicio" de gravação de dados. Não sei se isso é realmente assim, comecei a escrever código em C a pouco tempo e não sei nada de programação.
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> #define MAXPACIENTES 150 // DADOS DO PACIENTE typedef struct{ char nomecompleto[255]; char datanasc[255]; char CPF[255]; char RG[255]; char telefone[255]; char email[255]; char endereco[255]; char cidadeEestado[255]; char validacar[255]; char convenio[255]; char carteirinha[255]; }Cpaciente; Cpaciente paciente[MAXPACIENTES]; int contP = 0; int posicao; void cadastroPaciente(){ setlocale(LC_ALL, ""); FILE *arquivo; arquivo = fopen("cadastro_paciente.bin", "ab"); int dados, retornar, i; char fpag = 'P' || 'C'; char formapag[2]; if(arquivo == NULL){ printf("Erro ao abrir o arquivo."); }; // INICIALIZAÇÃO DA STRUCT EM VETORES for(contP = 0; contP <MAXPACIENTES; contP++){ strcpy(paciente[contP].carteirinha, "NULL"); strcpy(paciente[contP].cidadeEestado, "NULL"); strcpy(paciente[contP].convenio, "NULL"); strcpy(paciente[contP].CPF, "NULL"); strcpy(paciente[contP].datanasc, "NULL"); strcpy(paciente[contP].email, "NULL"); strcpy(paciente[contP].endereco, "NULL"); strcpy(paciente[contP].nomecompleto, "NULL"); strcpy(paciente[contP].RG, "NULL"); strcpy(paciente[contP].telefone, "NULL"); strcpy(paciente[contP].validacar, "NULL"); } //ARMAZENANDO DADOS NAS STRUCT for(contP = 0; contP < MAXPACIENTES; contP++){ printf("Você está na tela de cadastramento de pacientes.\n\n"); fflush(stdin); printf("Digite o CPF: "); fgets(paciente[contP].CPF, 255, stdin); printf("Digite o Nome Completo: "); fgets(paciente[contP].nomecompleto, 255, stdin); // Função que lê o nome printf("Digite a data de nascimento(EX: DD/MM/AAAA): "); fgets(paciente[contP].datanasc, 255, stdin); // Função que lê a data de nasc printf("Digite o CPF novamente: "); fgets(paciente[contP].CPF, 255, stdin); fflush(stdin); printf("Digite o número do RG: "); fgets(paciente[contP].RG, 255, stdin); // Função que lê o RG printf("Digite o número do Telefone/Celular: "); fgets(paciente[contP].telefone, 255, stdin); // Função que lê o num de telefone printf("Digite o email: "); fgets(paciente[contP].email, 255, stdin); // Função que lê o email printf("Digite o endereço completo(EX: Rua, numCasa - Bairro): "); fgets(paciente[contP].endereco, 255, stdin); // Função que lê o endereço printf("Digite a Cidade e o Estado(EX: Cidade/Estado): "); fgets(paciente[contP].cidadeEestado, 255, stdin); printf("Particular ou Convênio? Informe com P ou C: "); scanf("%c", &fpag); // Função que lê a forma de pagamento informada pelo printf fpag = toupper(fpag); if(fpag == 'P'){ printf("Digite D para Dinheiro ou C para Cartão.\n"); printf("Forma de pagamento: "); scanf("%s", formapag); // Função que lê a forma de pagamento informada pelo printf }else if(fpag == 'C'){ printf("Nome do Convênio: "); scanf("%s", paciente[contP].convenio); // Função que lê o nome do convenio printf("Digite o número da carteirinha: "); scanf("%s", &paciente[contP].carteirinha); // Função que lê o num da carteirinha printf("Data de validade da carteirinha(DD/MM/AAAA), não inserir se já estiver vencida!: "); scanf("%s", paciente[contP].validacar); // Função que lê a validade da carteirinha } printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: "); scanf("%d", &dados); if(dados == 1){ fwrite(&paciente[contP], sizeof(Cpaciente), 1, arquivo); contP = contP + 1; fclose(arquivo); printf("O paciente foi cadastrado com sucesso!\n"); }else if(dados == 2){ printf("Os dados não foram cadastrados!\n"); } printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: "); scanf("%d", &retornar); if(retornar == 1){ system("cls"); menuprincipal(); }else if(retornar == 0){ exit(1); } } } void consultaCadastro(){ FILE *arquivo; arquivo = fopen("cadastro_paciente.bin","rb"); char CPF[255]; printf("VOCÊ ESTÁ NA TELA DE CONSULTAR CADASTRO\n\n"); printf("Para encontrar o registro, digite o número do CPF: "); fflush(stdin); gets(CPF); for(contP = 0; contP < MAXPACIENTES; contP++){ while( fread(&paciente[contP], sizeof(Cpaciente), 1, arquivo)){ if(strcmp(CPF, paciente[contP].CPF)== 0){ printf("Registro encontrado!\n"); posicao = contP; }else{ posicao = -1; } if(posicao = -1) { printf(" \n Registro não encontrado! "); }else{ printf(" \n Registro Encontrado!\n"); printf("CPF: %s", paciente[posicao].CPF); } } } }
- 1
-
Obrigado pelas respostas.
-
@sannoy Obrigado meu parceiro, foi como eu disse sou estudante e praticamente calouro ainda kkk. O scanf pra ler strings foi um modo que eu vi no youtube. Obrigado pela dica, vou ver se funciona aqui
adicionado 28 minutos depois@sannoy E quanto a ler uma informação .txt para não repetir um número digitado pelo usuário? Eu quero que o sistema limite um cadastro por CPF, como faço para fazer isso?
- 1
-
Olá pessoal, sou novo aqui no fórum. Estou cursando o 2o semestre de ADS na Unip e meu trabalho desse semestre é fazer um sistema para uma clínica médica, a dúvida que eu estou é: Eu preciso ler um arquivo .txt com várias informações guardadas nele, mas eu preciso de uma só para válidar o cadastro do paciente. Para o sistema não efetuar duplo cadastro, eu quero pegar a informação no arquivo .txt, no caso o CPF. Preciso que o sistema leia o arquivo .txt se ele não encontrar o número do CPF já digitado pelo usuário, ele poderá continuar com o cadastro. Caso o número informado pelo usuário já possuir no registro .txt, ele não poderá prosseguir e mostrará que o CPF já está cadastrado. Alguém pode me ajudar com isso? Vou deixar o código aqui embaixo. Também aceito sugestões para deixar o código menor.
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> void cadastroPaciente(){ setlocale(LC_ALL, ""); // DADOS DO PACIENTE struct cadastro_paciente{ char nomecompleto[50]; char datanasc[50]; char RG[50]; char CPF[50]; char telefone[50]; char email[50]; char endereco[255]; char validacar[20]; char convenio[30]; char carteirinha[20]; }; int i, dados, retornar; char fpag = 'P' || 'C'; char formapag[2]; char CPF[20]; FILE *cadastro_paciente; cadastro_paciente = fopen("cadastro_paciente.txt", "a"); struct cadastro_paciente paciente; if(cadastro_paciente == NULL){ printf("Erro ao abrir o arquivo."); }; printf("Você está na tela de cadastramento de pacientes.\n\n"); printf("Digite o Nome Completo: "); scanf("%s", paciente.nomecompleto); fflush(stdin); printf("Digite a data de nascimento(EX: DD/MM/AAAA): "); scanf("%s", paciente.datanasc); fflush(stdin); printf("Digite o número do RG: "); scanf("%s", paciente.RG); fflush(stdin); printf("Digite o número do CPF: "); scanf("%s", paciente.CPF); fflush(stdin); printf("Digite o número do Telefone/Celular: "); scanf("%s", paciente.telefone); fflush(stdin); printf("Digite o email: "); scanf("%s", paciente.email); fflush(stdin); printf("Digite o endereço completo(EX: Rua, numCasa - Bairro - Cidade/Estado): "); fgets(paciente.endereco, 255, stdin); printf("Particular ou Convênio? Informe com P ou C: "); scanf("%c", &fpag); fpag = toupper(fpag); if(fpag == 'P'){ printf("Digite D para Dinheiro ou C para Cartão.\n"); printf("Forma de pagamento: "); scanf("%s", formapag); }else if(fpag == 'C'){ printf("Nome do Convênio: "); scanf("%s", paciente.convenio); printf("Digite o número da carteirinha: "); scanf("%s", &paciente.carteirinha); printf("Data de validade da carteirinha (DD/MM/AAAA): "); scanf("%s", paciente.validacar); } printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: "); scanf("%d", &dados); if(dados == 1){ //SALVANDO OS DADOS EM TXT fprintf(cadastro_paciente, "\nDADOS DO PACIENTE CADASTRADO\n"); fprintf(cadastro_paciente,"Nome Completo: %s\n", paciente.nomecompleto); fprintf(cadastro_paciente,"Data de nascimento: %s\n", paciente.datanasc); fprintf(cadastro_paciente,"RG: %s\n", paciente.RG); fprintf(cadastro_paciente,"CPF: %s\n", paciente.CPF); fprintf(cadastro_paciente,"Telefone/Celular: %s\n", paciente.telefone); fprintf(cadastro_paciente,"Email: %s\n", paciente.email); fprintf(cadastro_paciente,"Endereço: %s", paciente.endereco); fprintf(cadastro_paciente,"Convênio ou Particular?: %c\n", fpag); fprintf(cadastro_paciente, "Forma de pagamento, Cartão ou Dinheiro: %c\n", formapag); fprintf(cadastro_paciente,"Nome do Convênio: %s\n", paciente.convenio); fprintf(cadastro_paciente,"Número da Carteirinha: %s\n", paciente.carteirinha); fprintf(cadastro_paciente,"Data de validade da carteirinha: %s", paciente.validacar); fclose(cadastro_paciente); printf("O paciente foi cadastrado com sucesso!\n"); }else if(dados == 2){ printf("Os dados não foram cadastrados!\n"); } printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: "); scanf("%d", &retornar); if(retornar == 1){ system("cls"); menuprincipal(); }else if(retornar == 0){ exit(0); } }
- 1
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
Salvando vetor de struct em arquivo txt e acessando cada uma individualmente
em C/C#/C++
Postado
Eu consegui criar, mas como faço para acessar agora?