Ir para conteúdo
Fórum Script Brasil
  • 0

Meu código em C não funciona


seassalt

Pergunta

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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...