Comparar variáveis dentro de uma lista encadeada com while
Saudações Senhores (as), estou aqui para tentar uma solução, eu desenvolvi uma projeto de menu em C para um trabalho da faculdade, porém estou com um problema dentro dele: eu preciso comparar 2 variáveis tipo: se o usuário cadastrar uma aluno com uma determinada ela irá ficar armazenada numa lista encadeada, e se ele digitar outra matrícula mas usando o mesmo valor , o programa impede de ele cadastrar, até aí eu conseguir fazer , mas quando o usuário cadastrar outro aluno com outro número de matrícula , na hora de tentar cadastrar a terceira matrícula e suando a mesma segunda matrícula ele deixa fazer o cadastro , pois o certo era impedir e apresentar , MATRÍCULA JÁ FOI CADASTRADA..Exemplo..
Cadastrando matricula nº 1 ok , ele não deixa se você tentar usar novamente , mas ao cadastrar a matrícula nº 2 , se tentar usar ele na terceira gravação o programa deixa , e vi que precisava percorrer , pois no while dando printf ele mostra as matrículas 1 e 2 , e vi quando tento fazer a comparação usando o o while ele compara pelo primeiro da lista e não percorrer para o segundo, segue o código...
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#define MAX 3
typedef struct lista{
int matricula;
int cod;
int NovaMatricula;
char aluno[50];
char disciplina1[50];
char disciplina2[50];
char disciplina3[50];
float nota1;
float nota2;
float nota3;
float nota4;
float nota5;
float nota6;
float nota7;
float nota8;
float nota9;
int vazio;
struct lista *prox;
lista *anterior;
lista *inicio;
lista *novo;
lista *atual;
lista *ultimo;
lista *aux;
}Tlista;
Tlista registros[MAX];
void flush_in(){
int ch;
while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}
int verifica_pos( Tlista *dados ) {
int cont = 0;
Tlista *aux = dados->inicio;while ( aux !=NULL) {
cont++;
aux = aux->prox;
}
return(cont);
}
void inicializa(Tlista *dados){
dados-> inicio = NULL;
dados-> ultimo = NULL;
dados-> atual = NULL;
dados-> aux = NULL;
}
// AQUI É O CÓDIGO QUE COMPARA A MATRÍCULA//
//aqui seria a função que teria que comparar todas as matrículas ou códigos se são iguais...//
//FUNÇÃO VERIFICA CÓDIGO
int verifica_cod( Tlista dados, lista novo){
lista *aux=NULL;
printf("\na matricula nova nova %d\n\n", novo->matricula);
aux=dados->inicio;
if(aux==NULL){
printf("entrou no primero IF %d",novo->matricula);
return (1);
}
dados->atual=dados->inicio;
if(novo->matricula==aux->matricula){
while(aux!=NULL){
printf("%d",aux->matricula);
aux=aux->prox;
}
return(0);
}
printf("\n\n Matricula no FOR: %d\n",dados->atual->matricula);
printf("entrou no segundo IF %d", novo->matricula);
return (1);
}//Final da Função Verifica Código
void cadastrar(Tlista dados, lista novo){
lista* aux=NULL;
if (!novo){
printf("\nNao existe espaco na memoria!");
exit(1);
}
printf("\n\t\t Digite Nome do Aluno: ");
scanf("%s",&novo->aluno);
printf("\n\t\t Digite a 1º Disciplina : ");
scanf("%s",&novo->disciplina1);
flush_in();
printf("\n\t\t Nota do 1º Bimestre: ");
scanf("%f",&novo->nota1);
fflush(stdin);
printf("\n\t\t Nota do 2º Bimestre: ");
scanf("%f",&novo->nota2);
fflush(stdin);
printf("\n\t\t Nota do 3º Bimestre: ");
scanf("%f",&novo->nota3);
printf("\n\t\t Digite a 2º Disciplina : ");
scanf("%s",&novo->disciplina2);
fflush(stdin);
printf("\n\t\t Nota do 1º Bimestre: ");
scanf("%f",&novo->nota4);
fflush(stdin);
printf("\n\t\t Nota do 2º Bimestre: ");
scanf("%f",&novo->nota5);
fflush(stdin);
printf("\n\t\t Nota do 3º Bimestre: ");
scanf("%f",&novo->nota6);
printf("\n\t\t Digite a 3º Disciplina : ",setlocale(LC_ALL,""));
scanf("%s",&novo->disciplina3);
fflush(stdin);
printf("\n\t\t Nota do 1º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",&novo->nota7);
fflush(stdin);
printf("\n\t\t Nota do 2º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",&novo->nota8);
fflush(stdin);
printf("\n\t\t Nota do 3º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",&novo->nota9);
printf("NOVA %d\n\n", &aux->matricula);
printf("\nA matricula e : %d\n\n",novo->matricula);
novo->prox=NULL;
if(dados->inicio==NULL){
dados->inicio=novo;
dados->ultimo=novo;
}else{
dados->ultimo->prox=novo;
dados->ultimo=novo;
}
printf("\nMatricula Cadastrada com sucesso !\n\n");
system("pause");
}
void listar(Tlista *dados){
Tlista*aux;
aux=dados->inicio;
if(aux==NULL){
printf("\n Lista Vazia ! \n\n");
}else{
dados->atual=dados->inicio;
while(aux!=NULL){
printf("\n\nMatricula %d\n\n", aux->matricula);
aux=aux->prox;
}
}
system("pause");
}
void consultar(Tlista *dados){
int matbusca,encontrou=0;
printf("\n\nDigite a matricula para busca: ");
scanf("%d",&matbusca);
if (dados->inicio==NULL){
printf("\nLista vazia! Busca nao pode ser processada!\n");}else{
for (dados->atual=dados->inicio; dados->atual!=NULL;dados->atual=dados->atual->prox){
if (matbusca==dados->atual->matricula){
printf("\n\nMatricula: %d\n",dados->atual->matricula);
encontrou=1;
break;
}
if (dados->atual->prox==NULL && encontrou==0)
printf("\n\nRegistro nao encontrado!\n\n");
}
}
system("pause");
}
void excluir(Tlista *dados){
lista *anterior ,*atual;
int numMatricula,encontrou=0;
if(dados->inicio==NULL){
printf("Não existe dados para excluir !\n\n");
system("pause");
}else{
int numMatricula;
printf("\nDigite um numero de matricula : ",setlocale(LC_ALL,""));
scanf("%d", &numMatricula);
anterior=dados->inicio;
atual=dados->inicio;
while(atual!=NULL)
{
if(atual->matricula==numMatricula){
if(atual==dados->inicio){
dados->inicio=dados->inicio->prox;
free(atual);
break;
}else{
if(atual==dados->ultimo){
dados->ultimo=anterior;
}
//refazendo o encadeamento//
anterior->prox=atual->prox;
free(atual);
break;
}
}else{
anterior=atual;
atual=atual->prox;
}
}
printf("\nMatricula excluida com sucesso !\n\n");
system("pause");
}
}
int main(){
Tlista inicio,*aux, L;
int op=0,posicao,retorno,matricula,NovaMatricula;
inicializa(&L);
while(op!=6){
system("cls");
printf("--- Digite 1 para cadastrar : ");
printf("\n\n--- Digite 2 para listar : ");
printf("\n\n--- Digite 3 para consultar : ");
printf("\n\n--- Digite 4 para excluir : ");
scanf("%d", &op);
switch(op)
{
case 1:
posicao=verifica_pos(&L);
printf("%d", posicao);
if(posicao!=MAX){
lista *novo=NULL;
novo=(lista*)malloc(sizeof(lista));
printf("\n\t\t Digite o número da matrícula para o aluno : ",setlocale(LC_ALL,""));
scanf("%d",&novo->matricula);
fflush(stdin);
retorno = verifica_cod(&L,novo);
if ( retorno == 1 ){
cadastrar(&L,novo);
}else{
printf("\n\t\tEste número de Matrícula já existe. Tente Outro !\n\n");
printf("\t\t ");system("pause\n\n");
}
}else{
printf("\n Voce nao pode realizar mais cadastros !\n\n");
system("pause");
}
break;
case 2:
listar(&L);
getchar();
break;
case 3:
consultar(&L);
break;
case 4:
excluir(&L);
break;
case '5':printf("\nFIM DE EXECUCAO!");
getchar();
exit(1);
default:break;
}
}
}
Deixei comentado no código para melhor entendimento... Obrigado !Discussão (0)
Carregando comentários...