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);
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);
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);
}
Pergunta
seassalt
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
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.