Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
E.M.I.C.I.D.A

Por Gentileza, Ajuda em C - Validação em alguns pontos do Programa

Recommended Posts

Olá !

Galera, como eu faço para verificar se Já Existe uma Lista encadeada em um programa.

Usei um Switch com algumas opções, uma delas é "Criar Lista", se ele clicar novamente nesta opção de "Criar Lista", quero que apareça uma mensagem. Só que eu gostaria de saber como eu faço essa verificação se a Lista Já Existe.

Me ajudem por gentileza !

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente você tem o ponteiro para o primeiro elemento dessa lista...

Se ele for NULL, a lista não existe...

Considerando que você sempre deixe o ponteiro em NULL caso não exista nenhum elemento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas e se eu colocar por exemplo, um elemento nessa lista ?

Olha só o que eu fiz:


#include <stdio.h>
#include <stdlib.h>

struct aluno {
int ra;
float med1;
float med2;
float med3;
float m_global;
struct aluno *next;
};
typedef struct aluno alunos;

alunos *crialista (void){
return NULL;
}

alunos *insere_ra (alunos *x, int y){
alunos *novo = (alunos*) malloc (sizeof (alunos));
novo -> ra;
novo -> next=x;
return novo;
}

alunos *notas_todos (alunos *x){

alunos *i;

for (i=x;i!=NULL;i=i->next){
system ("cls");
printf ("Insira as 3 Medias:\n");
scanf ("%f %f %f",&i->med1,&i->med2,&i->med3);
i->m_global = (i->med1+i->med2+i->med3)/3;
system ("cls");
}
return NULL;
}

alunos *notas_ra (alunos *x){

alunos *i;
int num;

printf ("Digite o RA a ser creditado as Medias:\n");
scanf ("%d",&num);
system ("cls");
for (i=x;i!=NULL;i=i->next){
if (i->ra == num){
printf ("Insira as 3 Medias:\n");
scanf ("%f %f %f",&i->med1,&i->med2,&i->med3);
return NULL;
}
else
printf ("RA Nao Cadastrado!");
}

}

alunos *consulta (alunos *x, int y){

alunos *i;

for (i=x;i!=NULL;i=i->next){
if (i->ra == y){
printf ("RA: %d\nMedia1: %.2f\nMedia2: %.2f\nMedia3: %.2f\nM.Global: %.2f\n",i->ra,i->med1,i->med2,i->med3,i->m_global);
}
else{
printf ("RA Nao Cadastrado !\n");
}
}
return NULL;
}
void imprime (alunos *x){

alunos *i;

for (i=x;i!=NULL;i=i->next){
printf ("Media1 = %.2f\nMedia2 = %.2f\nMedia3 = %.2f\nM.Global: %.2f\n",i->med1,i->med2,i->med3,i->m_global);
}
}

main (){

alunos *x;
int y,num;
char resp;

while (num != 8){
printf ("================================================================================\n");
printf ("======================= C E N T R A L D O A L U N O ========================\n");
printf ("================================================================================\n\n\n\n\n\n\n");

printf ("Selecione a Opcao Desejada:\n\n");

printf ("1- Cria Lista\n\n2-Insere RA\n\n3-Insere Nota\n\n4-Consulta RA\n\n5- Imprime Lista\n");
scanf ("%d",&num);
system ("cls");
switch (num){
case 1:
if (x==NULL){
printf ("LISTA JA EXISTENTE");
system ("pause");
system ("cls");
}
else{
x=crialista();
printf ("Lista Criada Com Sucesso!\n\n\n");
system ("pause");
system ("cls");
}break;
case 2: printf ("Digite o RA:\n");
scanf ("%d",&y);
system ("cls");
x=insere_ra (x,y);break;

case 3:
printf ("Deseja inserir as notas para todos os alunos ? (S/N)\n");
scanf ("%s",&resp);
while (resp != 's' && resp != 'S' && resp != 'n' && resp != 'N'){
printf ("Caracter Invalido !!\n");
system ("pause");
system ("cls");
printf ("Deseja inserir as notas para todos os alunos ? (S/N)\n");
scanf ("%s",&resp);
}

if (resp == 's' || resp == 'S'){
x=notas_todos (x);break;
system ("cls");
}
else if (resp == 'n' || resp == 'N'){
x=notas_ra (x);
system ("cls");break;
}
else{
printf ("RA Nao Cadastrao !\n");
system ("pause");
system ("cls");break;
}

case 4: printf ("Digite o RA a ser Consultado:\n");
scanf ("%d",&y);
consulta (x,y);
system ("pause");
system ("cls");break;

case 5: imprime (x);
system ("pause");
system ("cls");break;
}
}
}

Olha o problema mesmo, esta quando eu tento colocar as notas INDIVIDUALMENTE.

Exemplo: "Deseja inserir notas para todos alunos ? (S/N) " (para os que eu cadastrei na função 'insere_ra'.

E outra, quando eu vou IMPRIMIR a lista, ele não imprime os dados do RA consultado na função 'consulta'.

E ele não imprime a lista com seus dados na função 'imprime'.

O que há de errado ??

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código:


#include <stdio.h>
#include <stdlib.h>

struct aluno {
int ra;
float med1;
float med2;
float med3;
float m_global;
struct aluno *next;
};
typedef struct aluno alunos;

alunos *crialista (void){
return NULL;
}

alunos *insere_ra (alunos *x, int y){
alunos *novo = (alunos*) malloc (sizeof (alunos));
novo -> ra;
novo -> next=x;
return novo;
}

alunos *notas_todos (alunos *x){

alunos *i;

for (i=x;i!=NULL;i=i->next){
system ("cls");
printf ("Insira as 3 Medias:\n");
scanf ("%f %f %f",&i->med1,&i->med2,&i->med3);
i->m_global = (i->med1+i->med2+i->med3)/3;
system ("cls");
}
return NULL;
}

alunos *notas_ra (alunos *x){

alunos *i;
int num;

printf ("Digite o RA a ser creditado as Medias:\n");
scanf ("%d",&num);
system ("cls");
for (i=x;i!=NULL;i=i->next){
if (i->ra == num){
printf ("Insira as 3 Medias:\n");
scanf ("%f %f %f",&i->med1,&i->med2,&i->med3);
return NULL;
}
else
printf ("RA Nao Cadastrado!");
}

}

alunos *consulta (alunos *x, int y){

alunos *i;

for (i=x;i!=NULL;i=i->next){
if (i->ra == y){
printf ("RA: %d\nMedia1: %.2f\nMedia2: %.2f\nMedia3: %.2f\nM.Global: %.2f\n",i->ra,i->med1,i->med2,i->med3,i->m_global);
}
else{
printf ("RA Nao Cadastrado !\n");
}
}
return NULL;
}
void imprime (alunos *x){

alunos *i;

for (i=x;i!=NULL;i=i->next){
printf ("Media1 = %.2f\nMedia2 = %.2f\nMedia3 = %.2f\nM.Global: %.2f\n",i->med1,i->med2,i->med3,i->m_global);
}
}

main (){

alunos *x;
int y,num;
char resp;

while (num != 8){
printf ("================================================================================\n");
printf ("======================= C E N T R A L D O A L U N O ========================\n");
printf ("================================================================================\n\n\n\n\n\n\n");

printf ("Selecione a Opcao Desejada:\n\n");

printf ("1- Cria Lista\n\n2-Insere RA\n\n3-Insere Nota\n\n4-Consulta RA\n\n5- Imprime Lista\n");
scanf ("%d",&num);
system ("cls");
switch (num){
case 1:
if (x==NULL){
printf ("LISTA JA EXISTENTE");
system ("pause");
system ("cls");
}
else{
x=crialista();
printf ("Lista Criada Com Sucesso!\n\n\n");
system ("pause");
system ("cls");
}break;
case 2: printf ("Digite o RA:\n");
scanf ("%d",&y);
system ("cls");
x=insere_ra (x,y);break;

case 3:
printf ("Deseja inserir as notas para todos os alunos ? (S/N)\n");
scanf ("%s",&resp);
while (resp != 's' && resp != 'S' && resp != 'n' && resp != 'N'){
printf ("Caracter Invalido !!\n");
system ("pause");
system ("cls");
printf ("Deseja inserir as notas para todos os alunos ? (S/N)\n");
scanf ("%s",&resp);
}

if (resp == 's' || resp == 'S'){
x=notas_todos (x);break;
system ("cls");
}
else if (resp == 'n' || resp == 'N'){
x=notas_ra (x);
system ("cls");break;
}
else{
printf ("RA Nao Cadastrao !\n");
system ("pause");
system ("cls");break;
}

case 4: printf ("Digite o RA a ser Consultado:\n");
scanf ("%d",&y);
consulta (x,y);
system ("pause");
system ("cls");break;

case 5: imprime (x);
system ("pause");
system ("cls");break;
}
}
}


Olha o problema mesmo, esta quando eu tento colocar as notas INDIVIDUALMENTE.

Exemplo: "Deseja inserir notas para todos alunos ? (S/N) " (para os que eu cadastrei na função 'insere_ra'.

E outra, quando eu vou IMPRIMIR a lista, ele não imprime os dados do RA consultado na função 'consulta'.

E ele não imprime a lista com seus dados na função 'imprime'.

O que há de errado ??

Obrigado.

Há de errado que tem função que não precisa retornar nada pra ninguém e tá retornando valores inúteis que ninguém reccebe.

Há de errado que você tem um char e quer ler string.

Há de errado que você usa x=notas_todos(x); e sobrescreve x com o valor NULL.

Há de errado que você usa x=notas_ra(x); e sobrescreve x com o valor NULL.

Corrige isso aí...

E olha isso:


if ([B]x==NULL[/B]){
printf ("[B]LISTA JA EXISTENTE[/B]");

como a lista existe se o ponteiro é NULL???

É o contrário!

-

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado !

Consegui elaborar o programa e está rodando normalmente.

Agradeço por me ajudar .!

Editado por E.M.I.C.I.D.A

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×