Jump to content
Fórum Script Brasil
  • 0

Meu código em C não funciona


Question

Bom dia, 

Eu estou com um problema em meu código (em C), ele é, basicamente, um menu para cadastros de animais e seus respectivos donos em um petshop. Quando coloco a opção 2 (cadastro do dono) ele funciona normalmente e eu consigo preencher todos os dados, porém quando tento adicionar mais um dono pelo atalho da linha 164 ele pula a entrada do dado "Nome" e vai direto pedindo o telefone. Como eu posso fazer para o código receber a entrada do nome de um segundo dono?

Obs.: O código não está completo, as únicas opções funcionais do "menu" são de 0 à 4, porém eu gostaria de resolver esse problema antes de prosseguir

Código:

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

    #define MAX_DONOS 200
    #define MAX_ANIMAIS 500

        //criar uma struct para representar o endereco
        typedef struct{
            char rua[30];
            int numero;
            char bairro[30];
        }Endereco;

        //criar uma struct para representar os dados de um dono
        typedef struct{
            char nome[30];
            char telefone[15];
            Endereco endereco_dono;
            int codigo_dono;
        }Pessoa;

        //criar uma struct para representar os dados de um animal
        typedef struct{
            char nome[30];   //'m', 'a', 'r', 'i', 'a', '\0'
            int codigo_animal, idade;
            char tipo[30];
            char observacoes[100];
            int codigo_dono;
        }Animal;


        //declaração de variáveis globais
        //criação de um vetor para cadastrar os animais - máximo 500 animais
        Animal lista_animais[MAX_ANIMAIS];
        //criação de um vetor para cadastrar os donos dos animais - máximo 200 donos
        Pessoa lista_donos[MAX_DONOS];
        //variável para gerenciar a quantidade de donos
        int indiceDonos = 0;   //2 informações: (1)próxima posição a ser preenchida e (2) a quantidade de donos no sistema
        int indiceAnimais = 0;   //2 informações: (1)próxima posição a ser preenchida e (2) a quantidade de animais no sistem


    //função para cadastrar um dono
    int cadastrarDono(){
        printf("CADASTRO DE UM NOVO DONO\n\n");
        printf("Posição que será preenchida = %d\n", indiceDonos);
        printf("Nome: ");
        setbuf(stdin, NULL);
        scanf("%29[^\n]", lista_donos[indiceDonos].nome);

        printf("Telefone: ");
        setbuf(stdin, NULL);
        scanf("%14[^\n]", lista_donos[indiceDonos].telefone);

        printf("Endereço\n Rua: ");
        setbuf(stdin, NULL);
        scanf("%29[^\n]", lista_donos[indiceDonos].endereco_dono.rua);

        printf(" Número: ");
        scanf("%d", &lista_donos[indiceDonos].endereco_dono.numero);

        printf(" Bairro: ");
        setbuf(stdin, NULL);
        scanf("%29[^\n]", lista_donos[indiceDonos].endereco_dono.bairro);

        lista_donos[indiceDonos].codigo_dono = indiceDonos+1;

        indiceDonos++;

        return indiceDonos;
    }


    int main(){
        //variáveis
        int opcaoUsuario;
        char validarSaida='q';
        char resposta;
        int i;

        do{
        //for(; validarSaida!='S', validarSaida!='s'; ){
            printf("\n1 - Cadastrar um novo animal\n");
            printf("2 - Cadastrar um novo dono\n");
            printf("3 - Listar todos os animais\n");
            printf("4 - Listar todos os donos\n");
            printf("5 - Buscar animal por nome\n");
            printf("6 - Buscar animal por código\n");
            printf("7 - Buscar dono por nome\n");
            printf("8 - Buscar dono por código\n");
            printf("9 - Editar os dados de um animal\n");
            printf("10 - Editar os dados de um dono\n");
            printf("0 - Encerrar o sistema\n");
            printf("Escolha uma opção: ");
            scanf("%d", &opcaoUsuario);

            switch(opcaoUsuario){
                case 1: // tratando o cadastro de um novo animal
                    if(indiceAnimais < MAX_ANIMAIS){ //se tem posição disponível para cadastro de animal
                        if(indiceDonos == 0){
                            printf("Não há donos cadastrados.\n Cadastre um dono antes de cadastrar o animal\n");
                        }
                        else{
                            //trata o cadastro
                            printf("CADASTRO DE UM NOVO ANIMAL\n\n");
                            indiceAnimais = 0;
                            printf("Nome: ");
                            setbuf(stdin, NULL);
                            scanf("%29[^\n]", lista_animais[indiceAnimais].nome);

                            printf("Idade: ");
                            scanf("%d", &lista_animais[indiceAnimais].idade);

                            printf("Tipo: ");
                            setbuf(stdin, NULL);
                            scanf("%29[^\n]", lista_animais[indiceAnimais].tipo);

                            printf("Observações: ");
                            setbuf(stdin, NULL);
                            scanf("%99[^\n]", lista_animais[indiceAnimais].observacoes);

                            lista_animais[indiceAnimais].codigo_animal = indiceAnimais+1;

                            int cod;
                            do{
                                //listagem dos códigos e nomes dos donos
                                printf("Donos cadastrados\n");
                                for(i=0; i<indiceDonos; i++){
                                    printf("%d - %s\n", lista_donos[i].codigo_dono, lista_donos[i].nome);
                                }

                                printf("Código do dono: ");
                                scanf("%d", &cod);

                                if(cod <= 0 || cod > indiceDonos){
                                    printf("Código de dono inválido!\n");

                                    printf("Deseja cadastrar um novo dono? (s/S)");
                                    scanf(" %c", &resposta);
                                }
                            }while((resposta != 's' && resposta != 'S') && (cod < 1 || cod > indiceDonos)); //código errado!

                            if(resposta == 's' || resposta == 'S'){
                                if(indiceDonos < MAX_DONOS){
                                    cod = cadastrarDono();
                                }
                            }

                            lista_animais[indiceAnimais].codigo_dono = cod;

                            indiceAnimais++;
                        }
                    }
                    else{
                        printf("Limite de cadastro de animais alcançado!\n");
                    }
                    break;

                case 2: //tratando o cadastro de um novo dono
                    if(indiceDonos < MAX_DONOS){
                        do{
                            cadastrarDono();

                            if(indiceDonos < MAX_DONOS){
                                printf("Deseja cadastrar um novo dono? (s/S/n/N)");
                                setbuf(stdin, NULL);
                                scanf("%c", &resposta);
                            }
                            else{
                                printf("Atingiu o máximo de cadastros possível\n");
                            }

                        }while((resposta == 's' || resposta == 'S') && indiceDonos < MAX_DONOS);
                    }
                    else{
                        printf("Limite máximo de cadastro de usuário atingido!\n");
                    }

                    break;

                case 3:
                    printf("Opção escolhida foi a 3 - listar animais");
                    break;

                case 4://tratando a listagem de todos os donos cadastrados
                    //|X|X|X|3|4|...|199|
                    printf("LISTAGEM DOS DONOS\n\n");

                    for(i=0; i<indiceDonos; i++){
                        printf("Código: %d\n", lista_donos[i].codigo_dono);
                        printf("Nome: %s\n", lista_donos[i].nome);
                        printf("Telefone: %s \n", lista_donos[i].telefone);
                        printf("Endereco: Rua %s, %d - %s\n\n",
                            lista_donos[i].endereco_dono.rua,
                            lista_donos[i].endereco_dono.numero,
                            lista_donos[i].endereco_dono.bairro);
                    }

                    break;

                case 5:
                    printf("Opção escolhida foi a 5 - buscar animal por nome");
                    break;

                case 6:
                    printf("Opção escolhida foi a 6 - buscar animal por código");
                    break;

                case 7:
                    printf("Opção escolhida foi a 7 - buscar dono por nome");
                    break;

                case 8:
                    printf("Opção escolhida foi a 8 - buscar dono por código");
                    break;

                case 9:
                    printf("Opção escolhida foi a 9 - editar dados de animal");
                    break;

                case 10:
                    printf("Opção escolhida foi a 10 - editar dados de dono");
                    break;

                case 0:
                    printf("Opção escolhida foi a 0 - sair");

                    printf("\nDeseja realmente sair? (S/N)");
                    scanf(" %c", &validarSaida);

                    break;

                default:
                    printf("Opção inválida\n");
                    printf("Verifique as opções disponíveis\n");
                    break;

            }//fecha chaves do switch
        }while(validarSaida != 'S' && validarSaida != 's');//fim do while

    return 0;
}

Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      149405
    • Total Posts
      645894
×
×
  • Create New...