Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

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

×