Ir ao conteúdo

Posts recomendados

Postado

@herbertbahia deu tudo certo quanto a isso, ai eu tentei colocar "Aperte enter para voltar ao menu" e deu esse erro aqui no cad_cliente. E outra, teria como eu colocar tipo quantos número o CPF e a parte do CNH precisa ter? Tipo como o CPF e o CNH só vai até 11 números ai se eu digitasse mais ou menos que isso aparecia na tela "números insuficiente" ou "números demais" por exemplo, como eu teria que usar nessa estrutura? 

menu.png

  • Curtir 2
Postado
1 hora atrás, Def disse:

meu professor mal explicou como trabalha em C

você tem um livro? uma apostila? um material digital? voce nao precisa  apertar enter para voltar ao menu quando simplesmente terminar de ler os dados ele pode retornar sem precisar ter que apertar nada entao coloque um loop no menu , mas se insiste pode user system("pause"); e chamar a funcao main(); ai quando teclar enter vai retornar

Postado

@herbertbahia como eu mal iniciei no curso e já começou a pandemia acabou que eles não disponibilizaram ainda um material digital nem livro sobre a programação em si, ele só falou para pesquisarmos sobre 

adicionado 2 minutos depois
#include <stdlib.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };

int main(void){
    struct cad_cliente info;
    int opcao;
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){

    case 1:
    	system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(info.CPF_CNPJ);
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereço do cliente: ");
    gets(info.Endereco);
    system("pause");
    main();
    break;
    }
	}

Eu fiz dessa maneira mas ai ficou desse jeito, não retornou para o menu principal. Não sei se coloquei no lugar errado ou faltou algo, mas tentei colocar em outros e ficou pior ainda

mds.png

Postado

@herbertbahia

#include <stdio.h>
#include <stdlib.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    system("cls");
    struct cad_cliente info;
    int opcao;
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){

    case 1:
    	system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(info.CPF_CNPJ);
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    main();
    break;
    }
	}

deu certinho, uma pergunta: tem como colocar tipo, como o CPF e o CNH só vai até 11 números, ou seja se a pessoa digitasse + que 11 ou menor que 11 aparecer uma dessas mensagem? "Números Insuficientes" ou "Números demais"

Postado

Todo vez que chama a função main para repetir as opções cria uma cópia de seu conteúdo na memória. Coloque o conteúdo do menu em uma função e chame-a com todo o resto por meio de um loop infinito. 

  • Curtir 1
Postado
11 minutos atrás, Def disse:

deu certinho,

parabens

 

11 minutos atrás, Def disse:

só vai até 11 números, ou seja se a pessoa digitasse + que 11 ou menor que 11 aparecer uma dessas mensagem?

sim isso é possivel veja um exmeplo usando uma variavel auxiliar

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    system("cls");
    struct cad_cliente info;
    int opcao;
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){

    case 1:
    char aux[200];
    system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(aux);
    if (strlen(aux) > 11)printf("contem mais de 11 digitos");
    else strcpy(info.nome,aux);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(info.CPF_CNPJ);
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    main();
    break;
    }
	}

talvez devesse tentar fazer tambem como o @Mauro Britivaldo citou

Postado
3 minutos atrás, Def disse:

deu errado no char aux[200]; olha só como ficou

 

tente desta maneira entao

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    system("cls");
    char aux[200];
    struct cad_cliente info;
    int opcao;
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){

    case 1:
    system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(aux);
    if (strlen(aux) > 11)printf("erro contem mais de 11 digitos\n");
    else strcpy(info.nome,aux);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(info.CPF_CNPJ);
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    main();
    break;
    }
	}

 

adicionado 0 minutos depois
4 minutos atrás, Def disse:
11 minutos atrás, Mauro Britivaldo disse:

Todo vez que chama a função main para repetir as opções cria uma cópia de seu conteúdo na memória. Coloque o conteúdo do menu em uma função e chame-a com todo o resto por meio de um loop infinito. 

Como assim? não entendi muito bem

vou fazer um exemplo e jaja te mostro

Postado

@herbertbahia mesmo dessa forma, quando eu digito um número muito menor de 11 digitos ele ainda não aparece a mensagem de "numeros insuficientes" ou "numeros demais" quando coloco menos de 11 digitos ou mais de 11 veja só

nadahaver.png

Postado

@herbertbahia Acho que agora só ficou na posição errada, era pra ficar na parte do CPF e do CNH, quando eu digitasse uma quantidade de numeros menor que 11 digitos aparecesse "digitos insuficiente" e se eu colocasse mais que 11 digitos aparecer "numero demais" ou algo do tipo, mas ta aparecendo isso na parte do nome, olha como ficou: 

ne.png

Postado

pronto assim está dentro de um loop infinito e nao está chamando a funcao main para evitar criar copias na memoria 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    char aux[200];
    struct cad_cliente info;
    int opcao;
    while(1){
            system("cls");
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){
    case 1:
        system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(aux);
    if (strlen(aux) != 11){
    printf("erro quantidade de digitos incorreto\n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    break;
    }
    }
	}

 

adicionado 2 minutos depois
if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    system("pause");
    break;
    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }

 

Postado

Nome é chamada recursiva, nesse tipo de processo uma função tem dentro de si uma chamada dela mesmo, assim como acontecia no seu código vi a função main que tinha uma chamada de si mesma só para exibir as opções do menu, mas vem com isso também consumo de memória sem necessidade.

 

Eu recomendei que vocês implementassem uma função só para exibir o menu\opções.

int opcao_usuario (void){
  system("cls");
  printf(	"-----------------------------------------\n"
  		"\tCONTROLE DE ESTACIONAMENTO\n"
  		"-----------------------------------------\n"
  		"\n1- Cadastrar Cliente\n"
  		"\n2- Cadastrar Veiculo\n"
  		"\n3- Listar veiculos cadastrados\n"
  		"\n4- Creditos\n"
  		"\n5- Sair\n"
  		"\nOpcao: "
         );
  int opcao = 0;
  scanf("%d",&opcao);
  return opcao;
}

Depois disse ainda que usem em um loop infinito, do tipo que @herbertbahia citou mais a função.

while(1){
switch (opcao_usuario ()){
	case 1: system("cls");
		printf("Informe o nome do cliente: ");
		fflush(stdin);
		gets(aux);
		if (strlen(aux) > 11)printf("erro contem mais de 11 digitos\n");
		else strcpy(info.nome,aux);
		printf("Informe a idade do cliente: ");
		scanf("%d", &info.idade);
		printf("Informe o CPF/CNPJ do cliente: ");
		fflush(stdin);
		gets(info.CPF_CNPJ);
		printf("Informe o número do CNH do cliente: ");
		gets(info.CNH);
		printf("Informe o endereco do cliente: ");
		gets(info.Endereco);
		system("pause");
		// main(); CHAMADA RECURSIVA SEM FUNDAMENTO SÓ PRA REPETIR O MENU
	break;
	}
}

Todo resto continua igual porque a intenção é a repetição do menu.

Postado

Todos resto continua igual, só as opções que ficam separadas. Loop fica dento da função main. No printf da função menu sobrou ); basta apagar e deixar o último.

Postado

@Mauro Britivaldo Dessa forma?

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    char aux[200];
    struct cad_cliente info;
    int opcao;
     while(1){

int opcao_usuario (void){
  system("cls");
  printf(	"-----------------------------------------\n"
  		"\tCONTROLE DE ESTACIONAMENTO\n"
  		"-----------------------------------------\n"
  		"\n1- Cadastrar Cliente\n"
  		"\n2- Cadastrar Veiculo\n"
  		"\n3- Listar veiculos cadastrados\n"
  		"\n4- Creditos\n"
  		"\n5- Sair\n"
  		"\nOpcao: "
         );
  int opcao = 0;
  scanf("%d",&opcao);
  return opcao;
}

while(1){
switch (opcao_usuario ()){
	case 1: system("cls");
		printf("Informe o nome do cliente: ");
		fflush(stdin);
		gets(aux);
		if (strlen(aux) > 11)printf("erro contem mais de 11 digitos\n");
		else strcpy(info.nome,aux);
		printf("Informe a idade do cliente: ");
		scanf("%d", &info.idade);
		printf("Informe o CPF/CNPJ do cliente: ");
		fflush(stdin);
		gets(info.CPF_CNPJ);
		printf("Informe o número do CNH do cliente: ");
		gets(info.CNH);
		printf("Informe o endereco do cliente: ");
		gets(info.Endereco);
		system("pause");
		// main(); CHAMADA RECURSIVA SEM FUNDAMENTO SÓ PRA REPETIR O MENU
	break;
	}
}
if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    system("pause");
    break;
    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }

 

adicionado 19 minutos depois

@herbertbahia esse if (strlen(aux) < 11){ teria que ser separado? porque deu erro com ele. Como na foto que lhe mandei

59 minutos atrás, herbertbahia disse:

pronto assim está dentro de um loop infinito e nao está chamando a funcao main para evitar criar copias na memoria 


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    char aux[200];
    struct cad_cliente info;
    int opcao;
    while(1){
            system("cls");
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){
    case 1:
        system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(aux);
    if (strlen(aux) != 11){
    printf("erro quantidade de digitos incorreto\n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    break;
    }
    }
	}

 

adicionado 2 minutos depois

if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    system("pause");
    break;
    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }

 

 

Postado
4 minutos atrás, KXSY disse:

@Def Você deveria mudar a forma que você está pegando as informações do cliente com o tempo vai dar problema, eu acho essa forma melhor.


#include <stdio.h>
#include <stdlib.h>

/* Constantes */
/* Cliente */
#define T_NOME 20
#define T_CPF_CNPJ 20
#define T_CNH 30
#define T_ENDERECO 50
#define NAO 0
#define SIM 1

/* Veiculo */
#define T_MODELO 20
#define T_MARCA 10


/* Definições */
struct def_cliente
{
  char nome[T_NOME];
  unsigned char idade;
  char cpf_cnpj[T_CPF_CNPJ],cnh[T_CNH];
  char endereco[T_ENDERECO];
  unsigned usado:1;
};

struct def_data
{
  unsigned dia:5;
  unsigned mes:4;
  unsigned short ano;
};

struct def_veiculo
{
  char nome[T_NOME];
  char modelo[T_MODELO];
  char marca[T_MARCA];
  struct def_data data;
};

/* Funções */
int MenuPrincipal(void);

int main(void)
{
  struct def_cliente cliente;
  char opcao;
  /* Loop principal */
  do
  {
    opcao=MenuPrincipal();
    switch(opcao)
    {
      case 1:
        printf("\nInforme o nome do cliente: ");
        /* Pega o nome do cliente */
        fgets(cliente.nome,T_NOME,stdin); /* stdin e o ponteiro para o seu teclado */
        printf("Informe a idade do cliente: ");
        scanf("%hhu%*c",&cliente.idade);
        printf("\nInforme o CPF/CNPJ do cliente: ");
        fgets(cliente.cpf_cnpj, T_CPF_CNPJ, stdin); /* stdin e o ponteiro para o seu teclado */
        printf("\nInforme o número do CNH do cliente: ");
        fgets(cliente.cnh, T_CNH, stdin); /* stdin e o ponteiro para o seu teclado */
        printf("\nInforme o endereço do cliente: ");
        fgets(cliente.endereco, T_ENDERECO, stdin); /* stdin e o ponteiro para o seu teclado */
        /* Mostra as informações */
        printf("\nNome:\t%s",cliente.nome);
        printf("Idade:\t%hhu",cliente.idade);
        printf("\nCPF\\CNPJ:\t%s",cliente.cpf_cnpj);
        printf("CNH:\t%s",cliente.cnh);
        printf("Endereco:\t%s",cliente.endereco);
        printf("\nAs informações estão corretas?\nS\\N:");
        scanf("%c%*c",&opcao);
        if((opcao=='n')||(opcao=='N'))
        {
          cliente.usado=NAO;
          printf("\nAs informações foram descartadas!");
          printf("\nPressione enter para continuar.");
          getchar();    /* Pausa o programa */
        }
        else
        {
          cliente.usado=SIM;
          printf("\nAs informações foram salvas.");
          printf("\nPressione enter para continuar.");
          getchar();    /* Pausa o programa */
        }
      break;
      case 5:
        if(cliente.usado==SIM)
        {
          /* Mostra as informações */
          printf("\nNome:\t%s",cliente.nome);
          printf("Idade:\t%hhu",cliente.idade);
          printf("\nCPF\\CNPJ:\t%s",cliente.cpf_cnpj);
          printf("CNH:\t%s",cliente.cnh);
          printf("Endereco:\t%s",cliente.endereco);
          printf("\nPressione enter para continuar.");
          getchar();    /* Pausa o programa */
        }
        else
        {
          printf("\nNao ha cliente cadastrado!");
          printf("\nPressione enter para continuar.");
          getchar();    /* Pausa o programa */
        }
      break;
    }
  }while(opcao!=6);
  printf("\nTchau!");
  return(0);
}

int MenuPrincipal(void)
{
  int opcao=0;
  do
  {
    printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Mostra cliente cadastrado");
    printf("\n6- Sair\n");
    printf("\nOpcao: ");
    /* %*c ignora o enter */
    scanf("%i%*c",&opcao);
    /* Verifica se a opção é válida */
    if((opcao<1)||(opcao>6))
    {
      printf("\nOpcao invalida!\n");
      printf("\nPressione enter e tente novamente.");
      getchar();
    }
  }while((opcao<1)||(opcao>6));
  return(opcao);
}

 

Ele tinha que apertar a opção 1 pra ir pra guia de cadastro e depois voltar ao menu, o jeito que você mandou ficou meio bagunçado por causa disso olha o jeito que ficou na imagem. E outra, eu to querendo que apareça tipo quando eu for colocar os dados do CPF e também do CNH apareça "Digitos insuficientes" ou "numero demais" caso eu coloque mais de 11 numeros ou menos de 11 numeros, já que o CPF e o CNH só são até 11digitos entende? se conseguir me ajudar agradeço muito

bagunça.png

Postado

@DefNão, ainda não era assim era mais como @KXSY fez. Outra coisa importante; Pareceu-me que fica um pouco perdido nas coisas, principalmente porque cada um contribui com coisa muito nova e você não questiona só aceita.

 

Por exemplo, o colega @KXSY usou em sua estrutura campos de bits e você nem se ligou, porém já que saber como implementar uma linha de edição dinâmica no terminal.

Postado

@Mauro Britivaldo isso tudo é muito novo pra mim ainda, eu tava fazendo com a estrutura que o @herbertbahia tava me ensinando e tava indo tudo certo mas ainda to com certas de duvidas por exemplo como cria um campo como "digite novamente" caso a pessoa que digitar os numeros insuficientes ter outra chance para digitar o CPF e tudo mais, tem coisas que eu compreendo mas eu não sei muito bem onde usar cada código entende e eu preciso entregar esse trabalho até terça-feira ;/

adicionado 4 minutos depois

@herbertbahia usei aquela estruturação de código depois que entendi o que você me enviou e deu certinho, porém aparece a mensagem "números insuficiente" mas não dá a opção de tentar novamente. Sabe como posso fazer isso?? 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    char aux[200];
    struct cad_cliente info;
    int opcao;
    while(1){
            system("cls");
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){
    case 1:
        system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(aux);
    if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    printf("Digite novamente: \n");
    system("pause");
    break;
    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    printf("Digite novamente: \n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }
    printf("Informe o número do CNH do cliente: ");
    fflush(stdin);
    gets(aux);
    if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    printf("digite novamente: \n");
    system("pause");
    break;
    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    printf("digite novamente: \n");
    system("pause");
    break;
    }
    else{
    strcpy(info.CNH,aux);
    }

    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    break;
    }
    }
	}

Eu coloquei aquela opção ali de "digite novamente" mas não tá dando pra escrever, queria que fosse um loop infinito caso a pessoa errasse várias vezes o CPF aparecesse a mensagem de "números insuficiente" com a opção de "digite novamente" espero que consiga me ajudar com isso, acho que a partir disso já vou conseguir finalizar a parte de cadastrar o cliente!!

novamente.png

Postado

voce nao precisar mais de uma vez fazer as mesmas verificações perceba que so sao tres: if para menor , else if para maior e else para equivalente. e ja sao ate demais. sobre a sua duvida de repetir para o usuario digitar de novo voce pode usar as famosas Estruturas de repetição da linguagem c : tem o famoso while, do while ou goto.

Postado
5 minutos atrás, herbertbahia disse:

voce nao precisar mais de uma vez fazer as mesmas verificações perceba que so sao tres: if para menor , else if para maior e else para equivalente. e ja sao ate demais. sobre a sua duvida de repetir para o usuario digitar de novo voce pode usar as famosas Estruturas de repetição da linguagem c : tem o famoso while, do while ou goto.

@herbertbahia como ficaria com o while, sabe me informar? ou goto se preferir, vai me ajudar demaaais preciso entregar esse trabalho até terça então to correndo contra o tempo kkkk

Postado

percebi agora que usou para as verificacoes if para variaveis diferentes está correto pensei que havia repetido desnecessariamente..

sobre os exemplos das estruturas de reptição..

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    char aux[200];
    struct cad_cliente info;
    int opcao;
    while(1){
            system("cls");
       printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){
    case 1:
        system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);
    
    printf("Informe o CPF/CNPJ do cliente: ");
    cpf:
    fflush(stdin);
    gets(aux);
    if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    printf("Digite novamente: \n");
    goto cpf;
   
    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    printf("Digite novamente: \n");
    goto cpf;
   
    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }
    printf("Informe o número do CNH do cliente: ");
    cnh:
    fflush(stdin);
    gets(aux);
    if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    printf("digite novamente: \n");
    goto cnh;

    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    printf("digite novamente: \n");
    goto cnh;
   
    }
    else{
    strcpy(info.CNH,aux);
    }

    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    break;
    }
    }
	}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!