Problema para Popular uma Struct

1 resposta
MarceloMVT

Olá boa noite, bom meu problema é popular uma struct, estou implementando uma lista simplesmente encadeada, vou colocar trechos do codigo que acho que fica mais fácil de explicar
minha struct
typedef struct listagem{ char prontuario[11]; char nome[150]; char curso[100]; int anoing; int anoform; char end[150]; char fone[15]; char cel[15]; struct listagem * proximo; }Alunos;

este é o meu main

`int main(void){

Alunos * aluno;

Alunos * cadaluno;
aluno = inicializa(aluno);
cadaluno = inicializa(cadaluno);

int i,aux;

printf("Aplicacao para Listagem de Alunos\n\n");
printf("1 - Cadastrar Aluno no Inicio\n");
printf("2 - Cadastrar Aluno no Fim\n");
printf("3 - Excluir aluno\n");
printf("4 - Mostrar aluno\n");
printf("5 - Remover Primeiro aluno Cadastrado\n");
printf("6 - Remover Ultimo aluno Cadastrado\n");
printf("7 - Listar Alunos por Curso\n");
printf("8 - Listar Alunos por Ano de Formatura\n");
printf("9 - Mostrar Todos os Alunos\n");
printf("0 - Sair\n\n");
printf("Digite a Opcao: ");
scanf("%d",&aux);
switch(aux){
    case 1:
        cadaluno = cadastra(cadaluno);
        aluno = insere_topo(aluno,cadaluno);
        break;
    case 2:break;
    case 3:break;
    case 4:break;
    case 5:break;
    case 6:break;
    case 7:break;
    case 8:break;
    case 9:
        exibir(aluno);
        break;
    default:
        printf("Tchau...");
        exit(1);
        break;
}

}`

o meu problema pelo jeito esta nessa funcao aqui
Alunos* cadastra(Alunos*aux){ util(); printf("Digite o Prontuario: "); scanf("%[^\n]",&aux->prontuario); printf("Digite o Nome: "); fgets(aux->nome, 150, stdin); printf("Digite o Curso: "); fgets(aux->prontuario, 11, stdin); printf("Digite o Telefone: "); fgets(aux->fone, 15, stdin); printf("Digite o Celular: "); fgets(aux->cel ,15, stdin); printf("Digite o Endereco: "); fgets(aux->end ,150,stdin); fflush(stdin); printf("Ano de Ingresso: "); scanf("%d",&aux->anoing); printf("Ano de Formatura: "); scanf("%d",&aux->anoform); return aux; }

o prompt lé somente o prontuário, mas quando vai ler o proximo char, ele da erro e fecha, alguém faz idéia do porquê isso acontece?

1 Resposta

D
Olá @MarceloMTV

Tente ler o prontuário com fgets() e não com scanf().

Ex:

printf("Digite o Prontuario: ");

fgets(aux->prontuario, 11, stdin);

Caso não  certo tente limpar o buffer do teclado usando um getchar() depois da leitura de cada campo.

Ex:

printf("Digite o Prontuario: ");

fgets(aux->prontuario, 11, stdin);

getchar();

Espero ter ajudado. :v:

Criado 26 de março de 2016
Ultima resposta 26 de mar. de 2016
Respostas 1
Participantes 2