Listas Encadeadas em C

Quer dizer que vou ter que usar alocação dinâmica para todos os itens da lista no caso:

Nome
Endereço
Tipo Comida
Nota

[quote=paloma]Quer dizer que vou ter que usar alocação dinâmica para todos os itens da lista no caso:[/quote]Não, você não já definiu que eles são vetores de char de tamanho fixo? Não precisa fazer alocação dinâmica. Também não seria absolutamente necessário para outros nós:

No primeiro;
No segundo;

printf("%s", primeiro.nome);
primeiro->proximoNo = segundo;
printf("%s", primeiro->segundo.nome);

Não precisa. Quando você fizer malloc da estrutura, os tipos dentro dela (nome, endereço, etc) já são alocados também. Você só vai ter que ir fazendo malloc’s para cada item. É por isso que eu acho mais fácil usar um vetorzão mesmo. :slight_smile:
Geralmente, quando se usa listas ligadas em C, você tem um ponteiro para o primeiro elemento da lista e um outro que seria o “elemento atual”, que serve para você ir percorrendo… é meio difícil explicar aqui. :frowning:

Paloma, acho que você esqueceu de responder… Era você que, antes do problema com o GUJ, usava o usuário pernambuco? Só curiosidade mesmo… :smiley:

Meu nick mudou depois do problema aqui no guj!

Eu já criei esse ponteiro aqui!

struct Lista *proxLista;

Olha eu tô toda enrolada com isso, eu vou dar uma pesquisada, ler algum material e depois quando compreender melhor, as dúvidas eu posto aqui.

Valeu pessoal!!

Carambra continua dando erro, agora o problema é no main

[code]#include <stdio.h>

#include <stdlib.h>

struct Lista{

char nome[51];

char Tcomida[31];

float nota;

char endereco[61];

Lista *prox;

}typedef item;

int main(void) // Erro: In function `int main()’:
{

int i, qtd;

printf ("\t\tCADASTRO DE RESTAURANTES\n\n");

printf (“Entre com a quantidade de restaurantes que deseja cadastrar: “);
scanf (”%d”, &qtd);
printf ("\n");

for (i = 0; i < qtd; i++)

{

printf ("Entre com o nome do Restaurante %d: ", i+1);
fgets (item.nome,51,stdin);

printf ("Entre com o Endereco: ");
fgets (item.endereco,61,stdin);

printf ("Entre com o tipo de comida que deseja: ");
fgets (item.Tcomida,31,stdin);

do{
      
 printf ("Entre com uma nota de avaliacao para a cozinha [0,5]: ");
 scanf ("%f",&item.nota);

} while (item.nota<0||item.nota>5);

printf ("\n");

}

system (“PAUSE”);

return (0);
}

//FUNÇÃO CRIA LISTA VAZIA
item* lst_cria (void)

{

return NULL;

}

[/code]

Você declarou errado sua estrutura. Veja as mensagens anteriores para saber como é a sintaxe.
Além disso, mesmo que estivesse certa, você esqueceu de declarar a variável da estrutura. As mensagens anteriores falam como fazer isso também.
Boa sorte :wink:

Ñ estou identificando onde está o erro, eu declarei item que é a variável da struct :roll: :oops:

[code]struct Lista{

char nome[51];

char Tcomida[31];

float nota;

char endereco[61];

Lista *prox;

}typedef item;

[/code]

O typedef é no começo:

typedef struct Lista{
   char nome[51];
   char Tcomida[31];
   float nota;
   char endereco[61];
   struct Lista *prox;
} item;

Mas isso é no caso de estar trabalhando com listas, pq já fiz algums exercícios de strcut e ñ colocava no começo!! :roll:

Uma outra opção, que é a que você pode estar tentando usar é essa:

struct Lista{
    char nome[51];
    char Tcomida[31];
    float nota;
    char endereco[61];
    struct Lista *prox;
 };

typedef struct Lista item;

Eu já tentei assim também, mas dá o seguinte erro:

[code]struct Lista{

char nome[51];

char Tcomida[31];

float nota;

char endereco[61];

Lista *prox;

}typedef struct Lista item; erro:two or more data types in declaration of `item’
[/code]

O erro era por conta da vírgula que é antes do typedef.

Agora tá dando erro no main

int main()

O erros são esses:

1 - expected init-declarator before “int”

2 -expected ,' or;’ before “int”

Acho que é alguma coisa com esse fgets também, pq tá dando erro em todas as linhas onde ele está!

o problema deve ser essa variavel sua
stdin
nao está declarada

Já achou o erro? :wink:
Você não declarou a variável item. Só que você vai ter que mudar de nome, já que, com seu typedef, item agora é um tipo (como int, double e struct Lista)
Simplesmente declare, dentro da main a variável:
item umItem;
e use-a onde aparece o item, por exemplo:
fgets (item.nome,51,stdin);
vira
fgets (umItem.nome,51,stdin);