1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

programa em C

Discussão em 'Programação' iniciada por anthead, 9 de Março de 2008. (Respostas: 2; Visualizações: 657)

  1. anthead

    anthead Power Member

    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
     
  2. Mr_Miguel

    Mr_Miguel Power Member

    Código:
    new_next->nome = nome;
    
    Por acaso não será:

    Código:
    strcpy(new_next->nome, nome); //Copia o conteúdo da string "nome" para "new_next->nome"
    
    ?

    Mais ainda:

    Código:
    new_next->nome = malloc(30 * sizeof(char)); //Reserva espaço para 30 caracteres
    strcpy(new_next->nome, nome);
    
     
  3. anthead

    anthead Power Member

    ja esta a funcionar... e ja entendi!!! obrgado pela a ajuda!!!
     

Partilhar esta Página