>>184
printf("cf: ");
これの意味がわかってるとして書くよ。

条件分岐をもっと検討しなければいけないのは当然なんだけど、その前に出力する文字列を正しくしなければ、その先の話にすすめない。

課題文に、「cf: 」と出力せよとは書かれていない。
課題文に、「EOF\n」と出力せよとも書かれていない。
課題文に、「cf: 」と出力せよとは書かれていない。
課題文に、「EOF\n」と出力せよとも書かれていない。
課題文に、「cf: 」と出力せよとは書かれていない。
課題文に、「EOF\n」と出力せよとも書かれていない。
課題文に、「cf: 」と出力せよとは書かれていない。
課題文に、「EOF\n」と出力せよとも書かれていない。
かたくなにこれを出力しようとする限り合格は得られない。

出力すべき文字列は
「same content」
「shorter: data1.txt」
「shorter: data2.txt」
「different characters appear」
この四つ。これらを条件によって使い分ける。

「same content」とは、内容が同じだったよ、って意味。
「shorter: data1.txt」はdata.txtのほうが短かったって意味。「different characters appear」は異なる文字列だったって意味。

cf: EOF\nと書き出すのではなく、shorter: data1.txtと書き出すの。
"EOF\n"を"shorter: data1.txt"に書き換えるの。
最初からずっとそう言ってるよ。