为什么这个程序打开后停不下来QAQ

问题遇到的现象和发生背景
 /*
编写程序,从键盘输入一串字符,要求将该串字符的倒序串先写入到文件f1.txt中,然后再将原字符串的内容接到该文件的末尾。例如,假设从键盘输入的字符串为
“How do you do?”,则文件f1.txt的内容为:‎
?od uoy od woHHow do you do?*/
#include<iostream>
#include<string.h>
using namespace std;
/* Reverse Order Function*/
void func(char *w,int len)
{
    char *p,*q;
    len=strlen(w);
    p=w;
    q=w+len-1;
    while(p<q)
    {
        char t=*p;
        *p=*q;
        *q=t;
    p++,q--;
    }
}
int main()
{
FILE *fp;
char ch;
char s[100];
if((fp=fopen("f1.txt","w"))==NULL)
{
cout<<"can't open file\n";
exit(1);
}
gets(s);
/* Reverse Order*/
if((fp=fopen("f1.txt","r"))==NULL)
{
cout<<"can't open file\n";
exit(1);
}
func(s,strlen(s));
    puts(s);
    fputs(s,fp);
    func(s,strlen(s));
    fputs(s,fp);
    fclose(fp);
    while(!feof(fp))
    {
    ch=fgetc(fp);
    putchar(ch);
    }
    fclose(fp);
}


一直在运行和输出
试过用fclose关过,但好像还是不行
我想要达到的结果

#include<iostream>
#include<string.h>
using namespace std;
/* Reverse Order Function*/
void func(char* w, int len)
{
    char* p, * q;
    len = strlen(w);
    p = w;
    q = w + len - 1;
    while (p < q)
    {
        char t = *p;
        *p = *q;
        *q = t;
        p++, q--;
    }
}
int main()
{
    FILE* fp;
    char ch;
    char s[100];
    if ((fp = fopen("f1.txt", "w")) == NULL)
    {
        cout << "can't open file\n";
        exit(1);
    }
    gets_s(s);
    /* Reverse Order*/
    if ((fp = fopen("f1.txt", "r")) == NULL)
    {
        cout << "can't open file\n";
        exit(1);
    }
    func(s, strlen(s));
    puts(s);
    fputs(s, fp);
    func(s, strlen(s));
    fputs(s, fp);
    //fclose(fp);
    while (!feof(fp))
    {
        ch = fgetc(fp);
        putchar(ch);
    }
    fclose(fp);
}