Fiz o seguinta código para teste,mas não entendo porque no  num = imprime lixo e no num2 = lixo,sendo que eu deu numeros para o num e num2: olhe o código abaixo: 
  
#include <stdio.h> 
#include <stdlib.h>  
int main(void) 
{ 
    struct data 
    { 
        int num; 
        char nome[100]; 
        double num2; 
    };  
    struct data m;  
    printf("digite um numero: "); 
    scanf("%d",m.num); 
    fflush(stdin); 
    printf(" \n digite seu nome: "); 
    gets(m.nome); 
    printf(" \n digite seu salario:  "); 
    scanf("%f",&m.num2);  
    printf("Os numeros digitados foram: \n"); 
    printf("num = %d ; num2 = %f; nome: %s ",m.num,m.num2,m.nome);  
    system("pause"); 
    return 0; 
}