código de lista em estrutura de dados em C


estou fazendo esse código e tem uns erros básicos que não consigo fazer, por exemplo na opção de ajuda, esta dando erro depois de selecionar alguma das opções. E não estou conseguindo fazer um código para inserir uma lista no meio da sequencia que eu irei fazer

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

struct estoque
{
int codigo, preferencia;
char cor(15), data(11), tipo(15), nome(45), necessidade(50), telefone(50);
struct estoque *ant;
struct estoque *prox;
};
typedef struct estoque cabelos;

int escolha;

main()
{

cabelos*inicio = (cabelos*)malloc(sizeof(cabelos));
if(!inicio)
{
    printf("Erro ao criar o início da fila");
    exit(1);
}


inicio->codigo = NULL;
inicio->cor(0) = NULL;
inicio->tipo(0)= NULL;
inicio->telefone(0) = NULL;
inicio->necessidade(0) = NULL;
inicio->data(0) = NULL;
inicio->ant = NULL;
inicio->prox = NULL;


do
{
    printf("1 - AJUDA");
    printf("n");
    printf("2 - Inserir cliente");
    printf("n");
    printf("3 - Imprimir todos os clientes partir do inicio");
    printf("n");
    printf("4 - Buscar cliente");
    printf("n");
    printf("5 - Remover cliente");
    printf("n");
    printf("6 - Sair");
    printf("nFunção: ");
    scanf("%i", &escolha);
    printf("n");
    
    switch(escolha)
    {
        case 1:
            {
                printf("Tutorial");
                printf("nPressione o numero da função que deseja realizar e tecle enter para começar");
                printf("n2 - CADASTRO DO CLIENTE");
                printf("n3 - MOSTRA OS CLIENTES CADASTRADOS");
                printf("n4 - BUSCA UM CLIENTE ESPECIFICO");
                printf("n5 - REMOVE UM CLIENTE ESPECIFICO");
                printf("n6 - PARA SAIR DO PROGRAMA");
                scanf("n");
            }
        case 2:{
            int preferencia;
            
            printf("Escolha a necessidade do cliente: ");
            scanf("%i", &preferencia);
            
            if(preferencia=1)
                {
                    
                    cabelos*novo = (cabelos*)malloc(sizeof(cabelos));
                    if (!novo)
                    {
                        printf("Erro");
                        exit(1);
                    }
                    
                    
                    novo->nome(0) = NULL;
                    novo->codigo = NULL;
                    novo->cor(0) = NULL;
                    novo->tipo(0) = NULL;
                    novo->telefone(0) = NULL;
                    novo->necessidade(0) = NULL;
                    novo->data(0) = NULL;
                    novo->ant = NULL;
                    novo->prox = NULL;
                    
                    printf("Nome do cliente: ");
                    fflush(stdin);
                    gets(novo->nome);
                     
                    printf("Codigo do cabelo: ");
                    scanf("%i", &novo->codigo);
                    
                    printf("Cor do cabelo: ");
                    fflush(stdin);
                    gets(novo->cor);
                    
                    printf("Tipo do cabelo: ");
                    fflush(stdin);
                    gets(novo->tipo);
                    
                    printf("Telefone do cliente: ");
                    fflush(stdin);
                    gets(novo->telefone);
                    
                    printf("Necessidade do cliente: ");
                    fflush(stdin);
                    gets(novo->necessidade);
                    
                    printf("Data de retirada: ");
                    fflush(stdin);
                    gets(novo->data);
                    
                    
                
                    
                    
                    if (inicio->prox == NULL)
                    {
                        inicio->prox = novo;
                        novo->ant = inicio;
                    }
                    else
                    {
                        cabelos *temp;
                        temp = inicio;
                
                        while (temp->prox != NULL)
                        {
                            temp = temp->prox;
                        }
                
                        temp->prox = novo;
                        novo->ant = temp;
                    }
                }
                
                else if(preferencia = 2)
                {
                    
                    cabelos *novo = (cabelos *) malloc (sizeof(cabelos));
                    if (!novo)
                    {
                        printf("Erro ");
                        exit(1);
                    }
                
                    
                    novo->codigo = NULL;
                    novo->cor(0) = NULL;
                    novo->tipo(0) = NULL;
                    novo->data(0) = NULL;
                    novo->ant = NULL;
                    novo->prox = NULL;
                    
                    printf("Nome do cliente: ");
                    scanf("%i", &novo->nome);
                    
                    printf("Codigo do cabelo: ");
                    scanf("%i", &novo->codigo);
                                
                    printf("Cor do cabelo: ");
                    scanf("%i", &novo->cor);
                    
                    printf("Tipo do cabelo: ");
                    scanf("%i", &novo->tipo);
                    
                    printf("Telefone do cliente: ");
                    scanf("%i", &novo->telefone);
                    
                    printf("Necessidade do cliente: ");
                    scanf("%i", &novo->necessidade);
                
                    printf("Data de retirada: ");
                    fflush(stdin);
                    gets(novo->data);
                
                    
                    cabelos *temp;
                    temp = inicio->prox;
                    novo->prox = inicio->prox;
                    inicio->prox = novo;
                    novo->ant = inicio;
                    temp->ant = novo;
                }
            break;
        }
            
    
    
        case 3: 
            {
                
                cabelos *temp;
                temp = inicio;
                
                 
                if(inicio->prox == NULL)
                {
                    printf("Nenhum cabelo encontradonn");
                    system("pause");
                    break;
                }
                else
                {
                    
                    do 
                    {
                        temp = temp->prox;
                        printf("Nome: %sn", temp->nome);
                        printf("Codigo: %in", temp->codigo);
                        printf("Cor: %sn", temp->cor);
                        printf("Tipo: %sn", temp->tipo);
                        printf("Telefone: %sn", temp->telefone);
                        printf("Necessidade: %sn", temp->necessidade);
                        printf("Data: %sn", temp->data);
                        printf("n");
                    }while (temp->prox != NULL);
                }
            }
            printf("n");
            system("pause");
            break;
        
        case 4:
            {
                 
                if(inicio->prox == NULL)
                {
                    printf("Nenhum cabelo encontradonn");
                    system("pause");
                    break;
                }
                
                
                char produto_pesquisado(30);
                
            
                printf("Informe o nome do livro: ");
                fflush(stdin);
                gets(produto_pesquisado);
                printf("n");
                
                 
                cabelos *temp;
                int aux = 0;
                temp = inicio;
                
                 
                do
                {
                    temp = temp->prox;
                    if(strcmp(temp->cor, produto_pesquisado) == 0)
                    {
                        printf("Codigo: %in", temp->codigo);
                        printf("Cor: %sn", temp->cor);
                        printf("Tipo: %sn", temp->tipo);
                        printf("Data: %sn", temp->data);
                        printf("n");
                        aux++;
                    }
                }while (temp->prox != NULL);
                if(aux == 0)
                {
                    printf("O cabelo informado nao consta na base de dadosnn");
                    system("pause");
                    break;
                }
            }
            printf("n");
            system("pause");
            break;
        case 5:
            {
                
                if(inicio->prox == NULL)
                {
                    printf("Nenhum cabelo encontradonn");
                    system("pause");
                    break;
                }
                
                
                int codigo_remover;
                char resp;
                
                
                printf("Informe o codigo do cabelo a ser removido: ");
                scanf("%i", &codigo_remover);
                
                
                cabelos *temp;
                cabelos *aux;
                temp = inicio->prox;
                aux = inicio;
                
                 
                do
                {
                    if(temp->codigo == codigo_remover)
                    {
                        temp->prox->ant = aux;
                        aux->prox = temp->prox;
                        free(temp);
                        
                        printf("Informacao removida!n");
                        printf("Retornar ao menu inicial?<S/N>");
                        resp = getche();
                        if(toupper(resp) == 'S')
                            break;
                        else
                            exit(0);  
                    }
                    else
                    {
                        temp = temp->prox;
                        aux = aux->prox;
                    }
                }while (temp->prox != NULL);    
            }
            break;
        case 6:{
            
            {
                printf("Fim do programann");
            }
            system("pause");
            break;
        }
    }   
    system("cls");

}while(escolha != 6);

}