• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

heeven

inserção numa lista

1 mensagem neste tópico

Boas, estou com um problema, quando tento inserir uma frase, para depois chamar a função inserir lista, ele dá-me um segmentation fault. Ele dá isto quando escolho o "1" no switch, eu sei que pode ser uma coisa simples, mas sinceramente ando às voltas e não encontro o porquê. Obrigado

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 30

//necessary struct to save information of the word.
typedef struct palavra{
  char word[MAX];
}pala_data;
//information of the list. All the sentence
typedef struct list{
  pala_data palavra;
  struct list *next;
}list,*listpointer;


listpointer insert_list(listpointer p,pala_data c);
void print_list(listpointer *p);

int main()
{
  int t=0;
  char c[400];
  pala_data d;
  
  listpointer head=NULL;
  head=insert_list(head,d);
  
  
  
  printf("\t\tWelcome to text analiser!\n");
  printf("Please choose the way to input the text.\n");
  printf("Press 1 for reading from keyboard or press 2 if reading from a file.\n");
  printf("Press 3 for exit.\n");
  scanf("%d",&t);
  /*switch to choose the way to read*/
  switch (t){
    
    case 1: printf("Introduce your sentence: \n");
    printf("%s ",c);
    insert_list(head,d);
    print_list(&head);
    break;
      
    case 2: printf("Reading from the file:\n");
    insert_list(head,d);
    break;
      
    case 3: exit (0);
    break;
    
    default: 
      printf("The button pressed is not the correct one.\n");
      printf("Goodbye.\n");
      break;
    
  }
  
  
  return 0; 

}


listpointer insert_list(listpointer p,pala_data c)
{
  listpointer new,curr;
  new=(listpointer)malloc(sizeof(list));
  
  //if the list is empty
  if(new==NULL){
    printf("No memory left\n");
  }else{
    new->palavra=c;
    new->next=NULL;
  }
  
  if(p==NULL){
    
    p=new;
    
  }else{
    
    curr = p;
    
    while(curr->next != NULL){
      
      curr=curr->next;
      
    }
    curr->next=new;
    
  }
  
}

void print_list(listpointer *p)
{
  listpointer curr;
  
  
  if(*p == NULL)
    printf("Empty List\n");
  else{
    curr = *p;
    while(curr != NULL){
      printf("%s",curr->palavra);
      curr=curr->next;
    }
  }
  
  printf("\n");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora