Ir ao conteúdo
  • Cadastre-se

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


E.M.I.C.I.D.A

Posts recomendados

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.

Link para o comentário
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.

Link para o comentário
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!

-

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...