Ir ao conteúdo
  • Cadastre-se

Matheus Perusso

Membro Pleno
  • Posts

    22
  • Cadastrado em

  • Última visita

Reputação

6
  1. Consegui, valeu hehe. Só mais uma duvida, quando eu pegar um string e imprimo ela, sempre sai com o enter, ou seja, pula linha depois que eu imprimo a string, usei scanf quando é só uma palavra, mas quando não é não sei o que fazer.
  2. Consegui, valeu ehhe. Só tenho mais um problema, eu digito o cpf do cliente [0], ai tudo certo, mas se dps de fizer isso eu criar uma nova filial, o cpf que era 08751220946 vira 08751020946, não to entendendo o motivo disso, já q n relaciona. EDIT- Descobri que parte do código tá dando problema void criarfiliais(filial carrosdafilial[nf]){ int zero=0; carrosdafilial[nf].numerodecarros[0]=0; //Isso tá zuando o cpf, não sei porque, mas quando eu tiro, funciona normalmente. printf("\n Digite a localização da filial: "); fgets(carrosdafilial[nf].nomef,50,stdin); printf("\n\nFilial %s cadastrada com sucesso. O Número de identificação da filial é: %d\n", carrosdafilial[nf].nomef, nf ); } Eu preciso que essa função numero de carros em 0, tenha o valor 0 pra iniciar, tem como eu definir isso lá em cima na estrutura?
  3. Bem, estou fazendo um programa de uma locadora de carros, eu tenho a função de registrar clientes, aparentemente ela está funciondo normalmente, mas se dps q eu registrar alguns clientes, eu decidir registrar uma filial dessa empresa(e consigo), dps q eu registro essa filial, se eu tentar registrar um cliente, da falha de segmentação logo após eu escrever o primeiro nome. Não entendo o porque dessa falha, as duas funções não interagem, se eu tentar registrar um veiculo, funciona normalmente. Segue o código(É imenso, mas vou destacar somente as duas funções com problemas). #include<stdio.h> #include<stdlib.h> #include<string.h> int nc=0,ncar=-1,numeroc=0,nf=1,*pfiliais=&nf,*p=&nc,*pcar=&ncar; typedef struct{ char pnome[100],unome[100]; int cpf[12],numcadastro[100],senha[100]; char endereco[100]; }ficha; typedef struct{ int filialloc[3]; char placa[9],marca[30],modelo[30]; int ano[2],estado[2]; float quilometragem[2]; }cadastrocarro; typedef struct{ char nomef[50]; int identificadorcarros[50],numerodecarros[5]; }filial; void cadastro(ficha cliente[nc]){ __fpurge(stdin); //AQUI É AONDE COMEÇA A REGISTRAR O CLIENTE. printf("\n Digite seu primeiro nome: "); scanf("%s",cliente[nc].pnome); __fpurge(stdin); printf(" Digite seu sobrenome: "); fgets(cliente[nc].unome,100,stdin); } void vercpf(ficha cliente[nc]){ int verificador=0; for(;verificador==0;){ int vet[11],i,mult1=0,n1=10,dig1=0,mult2=0,n2=11,dig2=0,cont=0,contador=0,verificador2=0;; char cpf[12],stroca[2]; verificador=0; __fpurge(stdin); printf("\n %s, digite seu cpf no formato(XXXXXXXXXXX) : ", cliente[nc].pnome); fgets(cpf,12,stdin); for(i=0;i<11;i++){ stroca[0]=cpf[i]; vet[i]=atoi(stroca); } for(i=1;i<11;i++){ if(vet[0]==vet[i]){ cont++; } } for(i=0;i<10;i++){ if(i<9){ mult1+=vet[i]*n1; n1--; } mult2+=vet[i]*n2; n2--; } if(mult1%11<2){ dig1=0; }else{ dig1=11-(mult1%11); } if(mult2%11<2){ dig2=0; }else{ dig2=11-(mult2%11); } verificador2=0; for(int k=0;k<nc;k++){ contador=0; for(int m=0;m<11;m++){ if(cliente[k].cpf[m]==vet[m]){ contador++; if(contador==11){ verificador2++; printf("\n CPF já existe no sistema\n"); } } } } if((dig1!=vet[9] && dig2!=vet[10])||(dig1==vet[9] && dig2!=vet[10])|| (dig1!=vet[9] && dig2==vet[10])|| cont==10||strlen(cpf)<10){ printf(" CPF inválido"); __fpurge(stdin); cont=0; }else{ if(verificador2==0){ for(i=0;i<11;i++){ cliente[nc].cpf[i]=vet[i]; verificador++; } } } } } void numcadast(ficha cliente[nc]){ int verificador=1,contador=0,verificador2=0; for(;verificador>0;){ int vetcadast[5],i,mult=0,n=9,dig=0,var=0,caracteres=0; char cadast[6],stroca[2]; __fpurge(stdin); printf("\n %s, digite o numero base para seu identificador(4 primeiros números): ", cliente[nc].pnome); scanf("%s", cadast); if(strlen(cadast)!=4){ verificador++; printf("\n Verificador inválido- Número base deve ter somente 4 digitos\n"); }else{ verificador=0; for(i=0;i<5;i++){ stroca[0]=cadast[i]; vetcadast[i]=atoi(stroca); } for(i=0;i<4;i++){ mult+=vetcadast[i]*n; n--; } var=mult%11; if(var==10){ vetcadast[4]=0; }else{ vetcadast[4]=var; } for(int k=0;k<nc;k++){ contador=0; for(int m=0;m<4;m++){ if(cliente[k].numcadastro[m]==vetcadast[m]){ contador++; if(contador==4){ verificador++; printf(" Identificador já existe no sistema\n"); } } } } if(verificador==0){ for(i=0;i<5;i++){ cliente[nc].numcadastro[i]=vetcadast[i]; } } } } } void senhac(ficha cliente[nc]){ char senh[7],stroca1[2]; int vetsenha[6],verificador=0; for(;verificador==0;){ printf("\n %s, Digite sua senha(6 números): ", cliente[nc].pnome); scanf("%s", senh); if(strlen(senh)!=6){ printf(" A senha precisa ter 6 números"); verificador=0; }else{ for(int k=0;k<6;k++){ stroca1[0]=senh[k]; vetsenha[k]=atoi(stroca1); } for(int i=0;i<6;i++){ cliente[nc].senha[i]=vetsenha[i]; verificador++; } } } } void enderecoc(ficha cliente[nc]){ __fpurge(stdin); printf("\n %s, digite seu endereço: ", cliente[nc].pnome); fgets(cliente[nc].endereco,100,stdin); } void placacarro(cadastrocarro carro[ncar]){ int verificador=0; for(;verificador==0;){ char placa[9]; int cont=0; __fpurge(stdin); printf("\n Digite a placa do carro(XXX0000): "); fgets(placa,9,stdin); for(int i=0;i<ncar;i++){ if(strcmp(carro[i].placa, placa) == 0){ cont++; } } if(strlen(placa)!=8|| cont>0){ verificador=0; printf(" Placa inválida ou já consta no sistema\n"); __fpurge(stdin); }else{ verificador++; strcpy(carro[ncar].placa, placa); } } } void restofichacarro(cadastrocarro carro[ncar]){ __fpurge(stdin); printf("\n Digite a marca do carro: "); fgets(carro[ncar].marca,30,stdin); __fpurge(stdin); printf("\n Digite o modelo do carro: "); fgets(carro[ncar].modelo,30,stdin); __fpurge(stdin); printf("\n Digite o ano do carro: "); scanf("%d", carro[ncar].ano ); printf("\n Digite um número que representa o estado do carro(Sendo 10 muito bom e 0 horrivel): "); scanf("%d", carro[ncar].estado); printf("\n Digite a quilometragem do carro(KM): "); scanf("%f", carro[ncar].quilometragem); } void filiaisc(cadastrocarro carro[ncar], filial carrosdafilial[nf]){ //AQUI EU REGISTRO AS FILIAIS int verificador=0; for(;verificador==0;){ int identificador; printf(" Digite o identificador da filial em que deseja cadastrar o carro(Sede Chapecó=0): "); scanf("%d", &identificador); if(identificador<nf && identificador>0 || identificador==0){ carrosdafilial[identificador].identificadorcarros[carrosdafilial[identificador].numerodecarros[0]]=ncar; carrosdafilial[identificador].numerodecarros[0]+=1; carro[ncar].filialloc[0]=0; carro[ncar].filialloc[1]=identificador; verificador++; }else{ printf("\n Identificador de sede inválido\n"); } } } void criarfiliais(filial carrosdafilial[nf]){ __fpurge(stdin); carrosdafilial[nf].numerodecarros[0]=0; printf("\n Digite a localização da filial: "); fgets(carrosdafilial[nf].nomef,50,stdin); printf("\n\nFilial %s cadastrada com sucesso. O Número de identificação da filial é: %d\n", carrosdafilial[nf].nomef, nf ); } int main(){ int escolha; ficha cliente[nc]; cadastrocarro carro[ncar]; filial carrosdafilial[nf]; carrosdafilial[0].nomef[0]='C';carrosdafilial[0].nomef[1]='h';carrosdafilial[0].nomef[2]='a';carrosdafilial[0].nomef[3]='p';carrosdafilial[0].nomef[4]='e'; carrosdafilial[0].nomef[5]='c';carrosdafilial[0].nomef[6]='o'; do { escolha=90; __fpurge(stdin); printf("\n MENU LOCADORA DE VEÍCULOS \n\n"); printf(" (1) Cadastro de novos clientes\n"); printf(" (2) Cadastro de novos veículos\n"); printf(" (3) Locação de carros\n"); printf(" (4) Cadastro de novas filiais\n"); printf(" (5) Movimentar carros\n"); printf(" (6) Sair do programa\n"); printf("\n Digite o número correspondente a sua ação : "); scanf("%d", &escolha); switch (escolha){ case 1: cadastro(cliente); vercpf(cliente); numcadast(cliente); senhac(cliente); enderecoc(cliente); *p+=1; break; case 2: *pcar+=1; filiaisc(carro, carrosdafilial); placacarro(carro); restofichacarro(carro); break; case 3: scanf("%d", &numeroc); printf(" PLACA: %s", carro[numeroc].placa); printf(" MARCA: %s", carro[numeroc].marca); printf(" MODELO: %s",carro[numeroc].modelo); printf(" FILIAL %d: %s", carro[numeroc].filialloc[1], carrosdafilial[carro[numeroc].filialloc[1]].nomef); break; case 4: criarfiliais(carrosdafilial); *pfiliais+=1; break; } } while(escolha!=6); return(0); }
  4. ***** uaheuaehuaehaeu, em todas as funções q eu fiz ela é char, menos na da senha, erro bobo, nem me liguei haha. Tem um warning da fpurge tb : locadora.c: In function ‘cadastro’: locadora.c:17:5: warning: implicit declaration of function ‘__fpurge’ [-Wimplicit-function-declaration] __fpurge(stdin); ^~~~~~~~
  5. Sim, a stroca eu uso pra pegar somente um numero da string, dai uso ela pra passar pro vetor. Então, não tem como retirar os warning né?
  6. Consegui, valeu pela ajuda. Só tenho mais uma duvida, estou recebendo esses warnings: locadora.c:150:30: warning: passing argument 1 of ‘atoi’ from incompatible pointer type [-Wincompatible-pointer-types] vetsenha[k]=atoi(stroca); ^~~~~~ In file included from locadora.c:2:0: /usr/include/stdlib.h:108:12: note: expected ‘const char *’ but argument is of type ‘int *’ extern int atoi (const char *__nptr) Só que a função atoi está funcionando como deveria, tudo certo, como q eu tiro esses warnings?
  7. nc é o numero do cliente, cada vez que eu termino a execução no primeiro switch, ele incrementa um, usei um ponteiro pra incrementar porque eu precisa colocar um ponteiro, era requisito do trabalho, só coloquei pra ter um. Eu não fiz o cpf nem o resto, mas o cpf é um veto inteiro, senha e numero tb.
  8. Pelo que eu entendi, seria assim né: #include<stdio.h> #include<string.h> int nc=0,*p=&nc; typedef struct{ char pnome[100],unome[100]; int cpf[12],numcadastro[100],senha[100]; char endereco[100]; }ficha; void cadastro(ficha cliente[200]){ __fpurge(stdin); ficha cliente[nc]; printf("Digite seu primeiro nome: "); fgets(cliente[nc].pnome,100,stdin); printf("Digite seu segundo nome: "); fgets(cliente[nc].unome,100,stdin); printf("%s\n", cliente[nc].pnome); printf("%s\n", cliente[nc].unome); printf("\n%d\n", nc); } int main(){ int escolha,cliente[200]; do { escolha=90; printf("\n MENU LOCADORA DE VEÍCULOS \n\n"); printf(" (1) Cadastro de novos clientes\n"); printf(" (2) Cadastro de novos veículos\n"); printf(" (3) Locação de carros\n"); printf(" (4) Cadastro de novas filiais\n"); printf(" (5) Movimentar carros\n"); printf(" (6) Sair do programa\n"); printf("\n Digite o número correspondente a sua ação :\n"); scanf("%d", &escolha); switch (escolha){ case 1: cadastro(cliente); printf("%s\n", cliente[nc].pnome); printf("%s\n", cliente[nc].unome); *p+=1; break; } } while(escolha!=6); return(0); } só que ta dando vários erros, o que eu fiz de errado?
  9. tenho o seguinte código : #include<stdio.h> #include<string.h> int nc=0,*p=&nc; typedef struct{ char pnome[100],unome[100]; int cpf[12],numcadastro[100],senha[100]; char endereco[100]; }ficha; void cadastro(){ __fpurge(stdin); printf("Digite seu primeiro nome: "); fgets(cliente[nc].pnome,100,stdin); printf("Digite seu segundo nome: "); fgets(cliente[nc].unome,100,stdin); printf("%d", nc); } int main(){ int escolha; do { escolha=90; printf("\n MENU LOCADORA DE VEÍCULOS \n\n"); printf(" (1) Cadastro de novos clientes\n"); printf(" (6) Sair do programa\n"); printf("\n Digite o número correspondente a sua ação :\n"); scanf("%d", &escolha); switch (escolha){ case 1: cadastro(); printf("%s\n", cliente[nc].pnome); printf("%s\n", cliente[nc].unome); *p+=1; break; } } while(escolha!=6); return(0); } Quero saber, como eu passo essa struct como parametro para preencher esses essas strings dessa struct, para quando eu imprimir, fora e dentro da função, a string esteja preenchida com os mesmos nomes.
  10. pode deletar, resolvi.
  11. Entendi, usei uma string de troca e consegui, segue o código : int main(){ int vet[11],i; char cpf[12],stroca[2]; printf("Digite seu cpf no formato(XXXXXXXXXXX)"); fgets(cpf,12,stdin); for(i=0;i<11;i++){ stroca[0]=cpf[i]; vet[i]=atoi(stroca); }
  12. tentei usar a atoi pra passar esses numero para um vetor : int vet[11],i; char cpf[11]; printf("Digite seu cpf no formato(XXXXXXXXXXX)"); fgets(cpf,11,stdin); for(i=0;i<11;i++){ vet[i]= atoi(cpf[i]); } mas recebo o erro: In function ‘main’: testae.c:10:17: warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [-Wint-conversion] vet[i]= atoi(cpf[i]); ^~~ In file included from testae.c:1:0: /usr/include/stdlib.h:108:12: note: expected ‘const char *’ but argument is of type ‘char’ extern int atoi (const char *__nptr) Tentei mexer, colocar aquele const char, mas sempre da um erro diferente, como uso a função atoi corretamente?
  13. tentei subtrair pelo '0' e agr se eu boto o número como entrada, resultado 308, 2-318, 3-328... O resultado deveria ser 10, pois a multiplicação, na teoria, é 1*10. #include <stdlib.h> #include <stdio.h> int main(){ int mult1=0,mult2=0,n=10; char cpf[11]; printf("Digite seu cpf no formato(XXXXXXXXXXX)"); fgets(cpf,11,stdin); for(int i=0;i<9;i++){ mult1+=(cpf[i]*n); n--; } printf("%d", mult1-'0'); return(0); }
  14. Sim, na primeira conta só faz com 9 números. Se eu coloco só 1 de entrada, em vez de ele pegar o número 1*10 e imprimir, ele soma 1 com 48 e faz *10, não sei daonde sai esse 48 ali.
  15. Olá, estou fazendo um validador de cpf, a primeira parte consiste em multiplicar cada número pela sua posição (ex=123456789 - 1x10 -2x9...), coloquei o número numa string, mas quando faço os calculos sempre dá o número que eu insiro(estou testando só com um número +48*10, segue o código: #include <stdlib.h> #include <stdio.h> int main(){ int mult1=0,mult2=0,n=10; char cpf[11]; printf("Digite seu cpf no formato(XXXXXXXXXXX)"); fgets(cpf,11,stdin); for(int i=0;i<1;i++){ mult1+=(cpf[i]*n); n--; } printf("%d", mult1); 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...