fgets读取14个字符,由于apple pie不足14个,所以换行符也读入字符串了。而puts在输出字符串后,本身会换行,所以输出就有两次换行,而fputs只是输出字符串,不会自动换行,所以只输出一个换行而你第二个输入的字符串,由于长度超过14,所以实际只读入13个字符加一个字符串结束符,是没有读入换行符的。所以puts输出字符串加自动换行,而fputs输出字符串但不自动换行,因此输出Done时就显示在fputs输出字符串之后了