@ndrew 0 Denunciar post Postado Janeiro 24, 2009 Galera, to fazendo um programa para a faculdade, mas to com um sério problema de matrícula.. O programa é de cadastro de alunos, notas, tem relatório em ordem alfabética e é aí que estou com problemas.. quando cadastro 3 alunos, por ex: aa matrícula 0 a matrícula 1 b matrícula 2 quando mostro no relatorio ele fica assim: a matrícula 1 aa matrícula 0 b matrícula 2 se eu apago a matrícula 0 e cadastro outro aluno, por ex: c fica assim: a matrícula 0 b matrícula 2 c matrícula 3 sendo que a matrícula a tem que ficar com 1, não 0. estou colocando a matrícula como autoincrement, mas acho q esse n é o problema... campo[i]='c'; mat[i]=cont;eu fiz do jeito mais sinistro q é guardar o valor dentro de uma auxiliar pra trocar pela outra. Minha função organiza: void organiza() { char auxnome[30],auxrua[50],auxbairro[50],auxcidade[50],auxuf[50],auxsit[3], auxcampo; int auxmat,auxdia,auxmes,auxano,i,j; float auxn1,auxn2,auxn3,auxn4,auxmedia,auxprovasub; for (i=0; i <max; i++) for (j=0; j< max-1; j++) { if ((strcmp(nome[j],nome[j+1])>0) && (campo[j+1]=='c')) { auxcampo=campo[j]; campo[j]=campo[j+1]; campo[j+1]=auxcampo; strcpy (auxnome,nome[j]);strcpy (nome[j],nome[j+1]);strcpy (nome[j+1],auxnome); strcpy (auxrua,rua[j]);strcpy (rua[j],rua[j+1]);strcpy (rua[j+1],auxrua); strcpy (auxbairro,bairro[j]);strcpy (bairro[j],bairro[j+1]);strcpy (bairro[j+1],auxbairro); strcpy (auxcidade,cidade[j]);strcpy (cidade[j],cidade[j+1]);strcpy (cidade[j+1],auxcidade); strcpy (auxuf,uf[j]);strcpy (uf[j],uf[j+1]);strcpy (uf[j+1],auxuf); strcpy (auxsit,sit[j]);strcpy (sit[j],sit[j+1]);strcpy (sit[j+1],auxsit); auxmat=mat[j];mat[j]=mat[j+1];mat[j+1]=auxmat; auxdia=dia[j];dia[j]=dia[j+1];dia[j+1]=auxdia; auxmes=mes[j];mes[j]=mes[j+1];mes[j+1]=auxmes; auxano=ano[j];ano[j]=ano[j+1];ano[j+1]=auxano; auxano=ano[j];ano[j]=ano[j+1];ano[j+1]=auxano; auxn1=n1[j];n1[j]=n1[j+1];n1[j+1]=auxn1; auxn2=n2[j];n2[j]=n2[j+1];n2[j+1]=auxn2; auxn3=n3[j];n3[j]=n3[j+1];n3[j+1]=auxn3; auxn4=n4[j];n4[j]=n4[j+1];n4[j+1]=auxn4; auxmedia=media[j];media[j]=media[j+1];media[j+1]=auxmedia; auxprovasub=provasub[j];provasub[j]=provasub[j+1];provasub[j+1]=auxprovasub; } } } Minha opção e(Relatório Geral-exibido em ordem alfabética): void e() { int i; organiza(); printf("Matricula\tNome\t\t\t""N1 N2 N3 N4 PS Media Situacao"); for(i=0;i<max;i++) { if(media[i]>=6.0) { strcpy(sit[i], "APR"); } else { strcpy(sit[i], "RPR"); } if(campo[i]=='c') { printf("\n%i\t\t%s\t\t\t""%.1f %.1f %.1f %.1f %.1f %.1f %s",mat[i],nome[i],n1[i],n2[i],n3[i],n4[i],provasub[i],media[i],sit[i]); } } getch(); system("cls"); } Minha oção A e minha opção B: Opc A - Cadastro Opc B - Excluir void a () { int i; i=acha(); if(i==100) //verifico se minha função retorna 10. { printf("A turma ja possui 70 alunos cadastrados.\n\n"); printf("\nPara cadastrar novos alunos, remova um aluno da turma.\n"); getch(); system("cls"); } else { printf("Informe o nome do aluno:"); gets(nome[i]); fflush(stdin); printf("Informe o dia de seu nascimento:"); scanf("%i",&dia[i]); fflush(stdin); printf("Informe seu mes de nascimento:"); scanf("%i",&mes[i]); fflush(stdin); printf("Informe seu ano de nascimento:"); scanf("%i",&ano[i]); fflush(stdin); printf("Informe a sua rua:"); scanf("%[^\n]",&rua[i]); fflush(stdin); printf("Informe o numero da casa do aluno:"); scanf("%i",&num[i]); fflush(stdin); printf("Informe o seu bairro:"); scanf("%[^\n]",&bairro[i]); fflush(stdin); printf("Informe a sua cidade:"); scanf("%[^\n]",&cidade[i]); fflush(stdin); printf("Informe sua UF:"); scanf("%[^\n]",&uf[i]); fflush(stdin); campo[i]='c'; //coloco o campo que estava vazio como cheio mat[i]=cont; cont++; printf("Aluno Cadastrado! Sua matricula e: %i",mat[i]); getch(); printf("\n"); system("cls"); } } void b () { char achou; int i,j,mat2; printf("Informe a matricula a ser apagada:"); scanf("%i",&mat2); fflush(stdin); achou='n'; for(i=0;i<max;i++) { if((campo[i]=='c')&&(mat[i]==mat2)) { achou='s'; j=i; } } if(achou=='s') { printf("Aluno Removido."); campo[j]='v'; } else { printf("O aluno n%co existe.",198); } getch(); fflush(stdin); system("cls"); } estou usando dev c++.. quem puder dar uma ajuda, ficarei imensamente grato.. vlw Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Janeiro 25, 2009 usa struct é bem + simples.. []s Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Janeiro 26, 2009 Fala @ndrew, tudo certo? Como o quitZAUMMMM disse, faz isso com uma struct, facilitará a sua vida. Os códigos que o pessoal escreveu para o 3º desafio da linguagem (pelo menos o meu ^_^) faz algo bem parecido, de uma forma mais clara. Não sei quando será aberto um tópico para discussão, mas fique esperto. E eu notei uma coisa, que você não deveria fazer. fflush(stdin) Jamais use fflush para limpar o stdin, a função fflush é feita para output buffers, e o seu comportamento é INDEFINIDO para input buffers. Compartilhar este post Link para o post Compartilhar em outros sites