在文本文件file1.txt中有若干个句子,现下要求把它们按每行一个句子的格式输出到file2.txt中

在文本文件file1.txt中有若干个句子,现在要求把它们按每行一个句子的格式输出到file2.txt中
#include<stdio.h>
#include<stdlib.h>
main()
{
FILE *fp1,*fp2;
char ch;
if((fp2=fopen("file2.txt","w"))==NULL||(fp1=fopen("file1.txt","r"))==NULL)
exit(0);
    else
{  
while((ch=fgetc(fp1))!=EOF)
{    
    if(ch!='.')

fputc(ch,fp2);
fputc('.',fp2);
}
if((ch=fgetc(fp1))=='.')
                         fputc('\n',fp2);
}
          while((ch=fgetc(fp2))!=EOF)

putchar(ch);


}
  fclose(fp1);
       fclose(fp2);
}

编译通过但是运行的时候不能达到想要实现的功能,求大神帮忙指明错在何处,还请赐教如何修改代码。谢谢!~
------解决方案--------------------
16行删去,
18、19行改成
else fputc('\n',fp2);

------解决方案--------------------

#include<stdio.h>
#include<stdlib.h>

int main()
{
    FILE *fp1,*fp2;
    char ch;

    if((fp2=fopen("file2.txt","w"))==NULL
------解决方案--------------------
(fp1=fopen("file1.txt","r"))==NULL)
        exit(0);


    while((ch=fgetc(fp1))!=EOF)
    {
        fputc(ch,fp2);
        if ('.' == ch 
------解决方案--------------------
 '!' == ch 
------解决方案--------------------
 '?' == ch)
            fputc('\n',fp2);
    }

    fclose(fp1);
    fclose(fp2);
    return 0;
}


不过这样改过之后还是有问题:
1. '.', '!', '?'有可能出现在句子的中间,比如 "hello.txt",再比如引用某人说的话的时候,这种情形怎么判断出来
2. 如果file1里面的某个句子已经是被'\n'切断的,怎么在file2中恢复成一个句子