Ir ao conteúdo
  • Cadastre-se

carolfera

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Reputação

0
  1. esse programa está com um erro e eu nao consigo achar, alguem pode ajudar. beijos #include <stdlib.h> #include <stdio.h> #include <conio.h> { int PAG,HE,ME,HS,MS,H,M; float n1,n2,n3,n4,n5=1, resto1, resto2, resto3, resto4; while(1) { printf("hora de entrada:"); scanf("%f",&n1); printf("minuto de entrada:"); scanf("%f",&n2); printf("hora de saida:"); scanf("%f",&n3); printf("minuto de saida:"); scanf("%f",&n4); resto1=fmod(n1,n5); resto2=fmod(n2,n5); resto3=fmod(n3,n5); resto4=fmod(n4,n5); if((resto1==0)&&(resto2==0)(resto3==0)&&(resto4==0)) { HE=(int)N1; ME=(int)N2; HS=(int)N3; MS=(int)N4; if(((HE>=0)&&(HE<=23))&&((HS>=0)&& (HS<=23))) { if (((ME>=0)&&(ME<=59))&&((MS>=0)&& (MS<=59))) { break; }else{ printf("Algum dos numeros foi digitado errado"); getch(); } } } if((resto1 != 0)||(resto2 != 0)||(resto3 != 0)||(resto4 != 0)) { printf("Algum dos numeros foi digitado errado, digite novamente") getch(); } system("cls"); } if(HS<HE) HS=HS+24; if(MS<ME) { MS=MS+60; HS=HS-1; } H=HS-HE; M=MS-ME; printf("O periodo foi de $d horas e %d minutos",H,M); PAG=H*60+M; if((H==0)&&(M==0)) { printf("Nao ficou estacionado"); } else if((PAG>=0)&&(PAG<=60)) { printf("Deu 4 Reais"); } else if((PAG>60)&&(PAG<=120)) { printf("Deu 6 Reais"); } else if((PAG>120)&&(M==0)) { PAG=4+H; printf("\nDeu %d Reais",PAG); } else if((PAG>120)&&(M>0)) { PAG=5+H; printf("Deu %d Reais",PAG); } }
  2. Por favor, alguem pode me ajudar Preciso entregar esse trabalho mas ainda estou muito crua e nao dá tempo para eu estudar e fazer o trabalho agora, preciso entregar pra depois estudar e aprender direito. Eu achei essa postagem mas nao entendi a solução dada no final. Alguem pode me ajudar. Beijos *programa em C, Controle de Estacionamento com Menu, -------------------------------------------------------------------------------- Se você executa o programa e tenta gravar um veículo direto, funciona.Se você tenta gravar outro veículo, desde que não seja uma placa repetida funciona também... Mas se você tenta gravar uma placa que já existe, a mensagem de erro é mostrada e ele pede outra placa(como esperado), mas depois de entrar com o resto dos dados (marca, modelo e cor) ele volta a pedir os dados desde o modelo, e as vezes desde a placa, eu não consigo achar erro no meu algoritmo, será que é porque eu fiquei chamando o procedimento "INSERIR(I)" passando a variável I por parâmetro várias vezes? Será que preciso colocar tudo dentro de laços de repetição invés de ficar chamando o procedimento de novo caso alguma condição não seja respeitada? O algoritmo tá fácil de analisa, até agora só fiz alguns procedimentos, o que inicializa os campos STATUS pra dizer se pode ou não gravar naquele registro, o menu com a opção 1 chamando o CADASTRAR_VEICULO() que testa se tem algum registro livre ai chama o INSERIR(I) passando o I que é a posição do vetor com o registro livre, acho que o erro tá no procedimento INSERIR mesmo... Conto com a ajuda do grupo, #include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>void INICIALIZA();void INSERIR(int I);void CADASTRAR_VEICULO();void CADASTRAR_VAGA();void CONTROLAR_ESTACIONAMENTO();void CONSULTAR_VAGAS();void LISTAR_OCUPADAS();void LISTAR_VEICULOS();struct{ char PLACA[8], MODELO[20], MARCA[20], COR[10]; int STATUS;}CARRO[10];int NVEI=0; //contador de veículos cadastrados//int NVAG=0; //contador de vagas cadastradas//-----------------------------------------------------------------------------main(){ int OP; FILE* P; INICIALIZA(); //abre o arquivo pro fopen "w" não substituir o que já existe P=fopen("CARRO.txt", "r"); fread(&CARRO, sizeof(CARRO), 1, P); fclose(P); do{ printf("CONTROLE DE ESTACIONAMENTO\n\n"); printf("1. Cadastrar veiculo\n2. Cadastrar vaga\n3. Controle do estacionamento\n"); printf("4. Consultar vagas\n5. Listar vagas ocupadas\n6. Listar veiculos\n7. Sair\n\nOpcao: "); scanf("%d", &OP); switch(OP) { case 1: { system("cls"); CADASTRAR_VEICULO(); break; } case 2: { system("cls"); CADASTRAR_VAGA(); break; } case 3: { system("cls"); CONTROLAR_ESTACIONAMENTO(); break; } case 4: { system("cls"); CONSULTAR_VAGAS(); break; } case 5: { system("cls"); LISTAR_OCUPADAS(); break; } case 6: { system("cls"); LISTAR_VEICULOS(); break; } case 7: break; default: { system("cls"); printf("Opcao invalida!\nEnter para voltar ao menu"); getch(); system("cls"); } } }while(OP!=7); getchar();}//-----------------------------------------------------------------------------void INICIALIZA(){ int I; for(I=0; I<10; I++) CARRO[I].STATUS=0; }//-----------------------------------------------------------------------------void INSERIR(int I){ char PL[8]; int I2, TESTE, TAM_PLACA; FILE *P; puts("Digite a placa: "); fflush(stdin); gets(PL); strupr(PL);//deixa caracteres da placa em maiúsculo for(I2=0; I2<10; I2++) { if(strcmp(PL, CARRO[I2].PLACA)==0) { printf("\nVeiculo ja cadastrado, informe outra placa\n\n"); INSERIR(I); } } strcpy(CARRO[I].PLACA, PL); TAM_PLACA=strlen(CARRO[I].PLACA); if(TAM_PLACA!=7) { if(TAM_PLACA<7) { printf("\nPlaca invalida\nDigitos insuficientes\n\n"); INSERIR(I); } else//(TAM_PLACA>7) { printf("\nPlaca invalida\nMuitos digitos\n\n"); INSERIR(I); } } //testa se 3 primeiros digitos são letras for(I2=0; I2<3; I2++) { TESTE=isalpha(CARRO[I].PLACA[I2]);//retorna 1 se for letra if(TESTE==0) { printf("\nPlaca invalida\nTres primeiros digitos devem ser letras!\n\n"); INSERIR(I); } } //testa se 4 últimos digitos não são letras for(I2=3; I2<7; I2++) { TESTE=isalpha(CARRO[I].PLACA[I2]);//retorna 1 se for letra if(TESTE==1) { printf("\nPlaca invalida\nQuatro ultimos digitos devem ser numeros!\n\n"); INSERIR(I); } } puts("\nDigite o modelo: "); fflush(stdin); gets(CARRO[I].MODELO); //deixa string em minúsculo strlwr(CARRO[I].MODELO); //deixa primeiro caractere maiúsculo CARRO[I].MODELO[0]=toupper(CARRO[I].MODELO[0]); puts("\nDigite a marca: "); fflush(stdin); gets(CARRO[I].MARCA); strlwr(CARRO[I].MARCA); CARRO[I].MARCA[0]=toupper(CARRO[I].MARCA[0]); puts("\nDigite a cor: "); fflush(stdin); gets(CARRO[I].COR); strlwr(CARRO[I].COR); CARRO[I].COR[0]=toupper(CARRO[I].COR[0]); CARRO[I].STATUS=1; P=fopen("CARRO.txt", "w"); fwrite(&CARRO, sizeof(CARRO), 1, P); fclose(P);}//-----------------------------------------------------------------------------void CADASTRAR_VEICULO(){ int I, FLAG=1; for(I=0; I<10; I++) { if(CARRO[I].STATUS==0) { INSERIR(I); FLAG=0; system("cls"); break; } } if(FLAG==1) { printf("Sem espaco para cadastrar\nEnter voltar ao menu..."); getch(); system("cls"); }}//-----------------------------------------------------------------------------void CADASTRAR_VAGA(){}//-----------------------------------------------------------------------------void CONTROLAR_ESTACIONAMENTO(){}//-----------------------------------------------------------------------------void CONSULTAR_VAGAS(){}//-----------------------------------------------------------------------------void LISTAR_OCUPADAS(){}void LISTAR_VEICULOS(){ int I, X=1; FILE *P; P=fopen("CARRO.txt", "r"); fread(&CARRO, sizeof(CARRO), 1, P); for(I=0; I<10; I++) { if(CARRO[I].STATUS==1) { printf("Veiculo %d\nPlaca: %s\t Modelo: %s\t Marca: %s\t Cor: %s\n\n", I+1, CARRO[I].PLACA, CARRO[I].MODELO, CARRO[I].MARCA, CARRO[I].COR); X=0; } } if(X==0) { printf("\nEnter voltar ao menu..."); getch(); system("cls"); } else { puts("Nenhum veiculo cadastrado\nEnter voltar ao menu..."); getch(); system("cls"); }}BOM, AQUI ESTÁ O PROBLEMA: for(I2=0; I2<10; I2++) { if(strcmp(PL, CARRO[I2].PLACA)==0) { printf("\nVeiculo ja cadastrado, informe outra placa\n\n"); INSERIR(I); } } Como você já disse na sua pergunta, se chamar a função "INSERIR(I)", ele vai chamar uma nova funçao INSERIR com o parametro I, porém ao sair da função nova que foi chamada, ele volta pra esse ponto da primeira funcao inserir chamada, então ele vai continuar a execução do programa, "descendo" pra parte que ele pergunta todos dados do carro novamente. então em vez de chamar a funçao inserir de novo, faça um laço pedindo para ele digitar apenas a placa novamente, enquanto a placa digitada for repetida. Se não entendeu posta aí que eu tento explicar melhor =)

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