View Full Version : programa em C


maxeuo
09-03-2008, 18:09
Boas, tenho um trabalho de C para fazer, mas tenho umas duvidas!!!
Programa:

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

struct peca{
struct peca *next;
int nome;
char* autor;
};

struct galeria{
struct galeria *next;
char* nome;
char* morada;
char* eventos;
int temperatura;
struct peca *listapecas;
};


struct galeria* da_ultima(struct galeria *primeira)
{
struct galeria *actual=primeira;
while((actual->next)!=NULL){

actual=actual->next;

}
return actual;
}


insert_galeria(struct galeria *primeira) {
struct galeria *ultimagaleria = da_ultima(primeira);
struct galeria *const new_next = malloc(sizeof(struct galeria));

char nome[30];
printf("\nNome: ");
scanf("%s",nome);

if (new_next) {
new_next->next = ultimagaleria->next;
ultimagaleria->next = new_next;
new_next->nome = nome;
}
}

printGaleria(struct galeria *primeira)
{
struct galeria *actual=primeira;
while(actual!=NULL){
printf("\n%s",actual->nome);
actual=actual->next;
}
}

void remove_next(struct galeria *node) {
struct galeria *node_next_next = node->next->next;
free(node->next);
node->next = node_next_next;
}

int main()
{

struct galeria *const g = malloc(sizeof(struct galeria));
if(g)
{
g->next=NULL;
g->nome="Guimarte";
}


int opcao;

do{
printf(" \nMenu \n");
printf("1- Inserir Galeria\n");
printf("2- Listar Galerias\n");
printf("0- Sair\n");

scanf("%d",&opcao);

switch(opcao)
{
case 1: insert_galeria(g);break;
case 2: printGaleria(g);break;
case 0: exit(1); break;
}
}
while(opcao!=0 || opcao!=1 || opcao!=2);



return 0;
}

Prq e que ao executar me da este bug:

Menu
1- Inserir Galeria
2- Listar Galerias
0- Sair
2

Guimarte
Menu
1- Inserir Galeria
2- Listar Galerias
0- Sair
1

Nome: marcelo

Menu
1- Inserir Galeria
2- Listar Galerias
0- Sair
2

Guimarte
??o <-----------------------------------------------------
Menu
1- Inserir Galeria
2- Listar Galerias
0- Sair

Mr_Miguel
09-03-2008, 19:52
new_next->nome = nome;


Por acaso não será:


strcpy(new_next->nome, nome); //Copia o conteúdo da string "nome" para "new_next->nome"


?

Mais ainda:


new_next->nome = malloc(30 * sizeof(char)); //Reserva espaço para 30 caracteres
strcpy(new_next->nome, nome);

maxeuo
09-03-2008, 22:03
ja esta a funcionar... e ja entendi!!! obrgado pela a ajuda!!!