void read_data (struct comp_detail * pt_comp_detail)
You return a value at the end, void is not the right return type. If it is then you shouldn't return anything. I'm not sure if you want to make a new comp_detail and return that, or just put data into pt_comp_detail, so I'll answer assuming it's the latter.
Where is name defined? I'll assume it's a part of struct comp_detail since that makes the most sense. Also, don't use gets, there's no way to make it safe. Use fgets instead to get a line.
scanf("%.2f", &new.etime);
Always check the return value of input functions, especially scanf since it's so easy to break and when you do, the brown stuff really hits the fan unless you're ready for it. You also can't use the .2 modifier for scanf, that's only for printing with printf. Try this instead
Code:
int read_data (struct comp_detail *pt_comp_detail)
{
printf("Enter Competitors Name: ");
fflush(stdout);
if (fgets(pt_comp_detail->name, sizeof(pt_comp_detail->name), stdin) != NULL)
{
printf("Enter Elapsed Time and number of faults: ");
fflush(stdout);
if (scanf("%f %d", &pt_comp_detail->etime, &pt_comp_detail->faults) != 2)
{
fprintf(stderr, "Some error message\n");
return 0;
}
}
return 1;
}