char *fp ; // ...(1)

fprintf(stdout,"input filename\n");
scanf("%c",fp);/*ココまでは動く ...(2) */
dataFile=fopen(fp,"r");

(1) ではポインタを宣言しているけれども、ポインタの保持している値は未知だよね。
(1) は char fp[20] ; として (2) は gets(fp) ; とすればいいんじゃないかな。