Help with C registration program

Asked

Viewed 133 times

0

I’m doing a program that reads customer data and stores it in covenants, which can be searched through the person’s code or simply their name. It’s not finished yet, but the problem is when the person gives an invalid name or code. I cannot find a way to break the loop loop and inform the user that he has entered an invalid name/code (which does not exist). I need help to fix this... Follow the code below:

#include <stdio.h>
#include <locale.h>
#include <string.h>
#define TAM 200

char nome[TAM] [50]; // matris 200x 50 max-49 caracteres no fim tem que ter /0
char endereco[TAM] [50];
int codigo[TAM];
long int telefone[TAM];
char cidade[TAM] [50];
int op;

void Cadastrar();
void Pesquisar();
void lista();
void Menu();

void Menu(){

    system ("cls");
    printf(".---------------------------------------.\n");
    printf("|           Menu principal:             |\n");
    printf("|       [1] - Cadastrar Convênio        |\n");
    printf("|       [2] - Marcar Valor              |\n");
    printf("|       [3] - Pesquisar Convênio        |\n");
    printf("|       [4] - Pagar a Conta             |\n");
    printf("|       [5] - Modificar Convênio        |\n");
    printf("|       [6] - Sair do Programa          |\n");
    printf("`---------------------------------------´\n");
    printf(" Selecione uma opção: ");
}

int main() {

    setlocale(LC_ALL, "");

    do{
    Menu();
    scanf("%d", &op);
    switch(op){
        case 1: Cadastrar(); break;
        case 2: printf("\n2\n"); break;
        case 3: Pesquisar(); break;
        case 4: printf("\n4\n"); break;
        case 5: printf("\n5\n"); break;
        case 6: printf("\nPrograma encerrado\n"); break;
        default: printf("\nOpção Inválida!\n"); printf("\n"); system("pause");
    }
    } while(op!=6);
    return 0;
}

void lista() {

    int i;
    for(i=0;i<TAM;i++) {
        if(codigo[i]>0){
            printf("\nNome: %s\nendereco: %s\ncodigo: %d", nome[i], endereco[i], codigo[i]);
        }else{
            break;
        }

    }
}

void Cadastrar() {

    system("cls");
    static int linha; // static porque o valor não muda, ou seja, pode ser usado em outras funções com o mesmo valor

        printf("========CADASTRO========\n");
        printf("\n-> Informe o nome: ");
        scanf("%s", &nome[linha]);
        printf("\n-> Informe o seu endereço: ");
        scanf("%s", &endereco[linha]);
        printf("\n-> Informe o seu telefone: ");
        scanf("%ld", &telefone[linha]);
        printf("\n-> Informe a sua cidade: ");
        scanf("%s", &cidade[linha]);
        printf("\n-> Insira um código (com apenas números) para o seu convênio: ");
        scanf("%d", &codigo [linha]);
        linha++; //proxima execução muda para proxima linha ou (linha=linha+1)
        printf("\nConvênio registrado com sucesso.\n");
        printf("\n");
        system("pause");
} //fimm do cadastro

void Pesquisar(){

    system("cls");
    int codigoPesquisa;
    char nomePesquisa [50];
    int i;
    do{
        printf("========PESQUISAR========\n");
        printf("\n[1] - Pesquisar por nome\n");
        printf("\n[2] - Pesquisar por código\n");
        scanf("%d", &op);
        switch(op){
            case 1:
                system("cls");
                printf("========PESQUISAR========\n");
                printf("\nDigite o nome a ser pesquisado: ");
                scanf("%s", &nomePesquisa);
                for(i=0;i<TAM;i++){//i vai de 0 a 199 size vale 200
                    if(strcmp (nome[i], nomePesquisa)){
                        printf("\nConvênio encontrado: \n");
                        printf("\n-> Nome: %s\n-> Endereço: %s", nome[i], endereco[i]);
                        printf("\n-> Telefone: %ld\n -> Cidade: %s\n -> \nCódigo: %d", telefone[i], cidade[i], codigo[i]);
                        }
                }
                        if else{
                        printf("\nNome não encontrado!\n");
                        printf("Pressione qualquer tecla para continuar...");
                        getchar();
                        getchar();
                        }

                break;
            case 2:
                system("cls");
                printf("========PESQUISAR========\n");
                printf("\nInforme o código a ser pesquisado: ");
                scanf("%d", &codigoPesquisa);
                    for(i=0;i<TAM;i++){//i vai de 0 a 199 size vale 200
                    if(codigo[i] == codigoPesquisa){
                        printf("\nConvênio encontrado: \n");
                        printf("\n-> Nome: %s\n-> Endereço: %s", nome[i], endereco[i]);
                        printf("\n-> Telefone: %lld\n -> Cidade: %s\n -> \nCódigo: %d", telefone[i], cidade[i], codigo[i]);
                    }
        }
                    else{
                        printf("\nCódigo não encontrado!\n");
                        printf("Pressione qualquer tecla para continuar...");
                        getchar();
                        getchar();
                    }

                break;
            default: printf("\nOpção Inválida!\n");
                printf("\n");
                system("pause");
                break;
        }
        printf("\nDigite 4 para continuar pesquisando ou qualquer outra tecla para sair ");
        scanf("%d", &op);
    }while(op==4);
    }
  • One possibility is: Place a break; when find to exit the loop and change it if else{ for if (i == TAM) {, This is if you went all the way through the vector and didn’t find.

  • Okay, thanks. I’ll try

1 answer

0

You can do something similar to the following code. Alter the structure of Menu a little, but I consider a good approach.

#include <locale.h>
#include <stdio.h>
#include <string.h>

int op;

void Menu(int *invalid_option);

void Menu(int *invalid_option) {
  system("clear");
  printf(".---------------------------------------.\n");
  printf("|           Menu principal:             |\n");
  printf("|       [1] - Cadastrar Convênio        |\n");
  printf("|       [2] - Marcar Valor              |\n");
  printf("|       [3] - Pesquisar Convênio        |\n");
  printf("|       [4] - Pagar a Conta             |\n");
  printf("|       [5] - Modificar Convênio        |\n");
  printf("|       [6] - Sair do Programa          |\n");
  printf("`---------------------------------------´\n");
  if (*invalid_option) {
    printf("Opção Inválida!\n");
    *invalid_option = 0;
  }
  printf(" Selecione uma opção: ");
}

int main() {
  setlocale(LC_ALL, "");
  int invalid_option = 0;

  do {
    Menu(&invalid_option);
    scanf("%d", &op);
    switch (op) {
      case 1:
        break;
      case 2:
        break;
      case 3:
        break;
      case 4:
        break;
      case 5:
        break;
      case 6:
        break;
      default:
        invalid_option = 1;
    }
  } while (op != 6);
  return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.