C语言文件相关的问题,希望友友们可以帮我看一下哪里有问题,望指导。

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define N 80
void main()
{
int i,p,q,j;
char a[N],c[N];

FILE *fp1,*fp2;
char ch;
fp1=fopen("D:\a.txt","w");
if(fp1==NULL)
{
printf("打开失败1\n");
exit(0);
}
printf("输入字符串:");
while((ch=getchar())!='\n')
{
fputc(ch,fp1);
}
fclose(fp1);
if((fp1=fopen("D:\a.txt","r"))==NULL)
{
printf("打开失败a\n");
exit(0);
}
if((fp2=fopen("D:\b.txt","w"))==NULL)
{
printf("打开失败b\n");
exit(0);
}
if(p+q-1<N)
{
for(i=p;i<=p+q;i++)
a[j++]=c[i];
for(i=p+q;i<N;i++)
a[j++]=c[i];
}
else
{
for(i=p;i<N;i++)
a[j++]=c[i];
for(i=0;i<p;i++)
a[j++]=c[i];
}
fclose(fp1);
fclose(fp2);
}
这是题目
在main函数中创建一个文件,将键盘输入的字符串写入文件中。打开该文件,读出字符串。将字符串从指定下标p处开始的q个字符(包括p处字符)复制到字符串的开头(若p后没有q个字符,则按实际字符数复制),形成的新串保存到另一个文件中。比如,abcdefg,从下标3处开始的2个字符复制到字符串的开头,得新串:decdefg。要求:p和q均由键盘输入。

修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
void main()
{
    int i, p, q, j, k;
    char a[N], c[N];

    FILE* fp1, * fp2;
    char ch;
    fp1 = fopen("D:\\a.txt", "w"); //fp1 = fopen("D:\a.txt", "w");
    if (fp1 == NULL)
    {
        printf("打开失败1\n");
        exit(0);
    }
    printf("输入字符串:");
    while ((ch = getchar()) != '\n')
    {
        fputc(ch, fp1);
    }
    fclose(fp1);
    if ((fp1 = fopen("D:\\a.txt", "r")) == NULL)  //(fp1 = fopen("D:\a.txt", "r")
    {
        printf("打开失败a\n");
        exit(0);
    }
    i = 0;
    while ((ch = fgetc(fp1)) != EOF)
    {
        a[i++] = ch;
    }
    fclose(fp1);
    printf("请输入p q:");
    scanf("%d%d", &p, &q);
    for (j = p, k = 0; j < q + p && j < i; j++)
        c[k++] = a[j];
    for (j = k; j < i; j++)//(若p后没有q个字符,则按实际字符数复制)
        c[k++] = a[j];
    c[k] = '\0';
    if ((fp2 = fopen("D:\\b.txt", "w")) == NULL)  //(fp2 = fopen("D:\b.txt", "w")
    {
        printf("打开失败b\n");
        exit(0);
    }
    k = 0;
    while (c[k] != '\0')
    {
        fputc(c[k], fp2);
        k++;
    }
    fclose(fp2);
}

不是让你读出文件吗,你读文件的代码在哪呢