#include <stdio.h>
#include <stdlib.h>
void level (int n , FILE*f , FILE*f2)
{
int i=0 ;
int k=0 ;
for (i=0 ; i< n ; i++ )
{
if (k != '\n')
{
k=fgetc(f) ;
fputc(k,f2) ;
while ( k!='\\'&& k!=EOF && k!='\n' )
{
k=fgetc(f) ;
fputc(k,f2) ;
}
}
else
{
break ;
}
}
}
void menu (int n , FILE*f , FILE*f2)
{
char ch [1000] ;
do
{
level(n,f,f2) ;
fputc('\n',f2) ;
}
while (fgets(ch,1000,f)!= NULL ) ;
}
int main()
{
FILE*f=NULL ;
FILE*f2=NULL ;
f = fopen("text.txt","r+") ;
f2= fopen("t.txt","w+") ;
menu(5,f,f2) ;
fclose(f);
fclose(f2);
return 0;
}
文件f包含行。每一行都采用此格式text1\text2\...\..
文件f2为空,当函数level
到达一行的末尾时,函数menu
不会&#34;得到&#34 34;下一行,但它在下一行之后得到了一行,我需要一个解决方案。
答案 0 :(得分:0)
由于您正在阅读menu
函数中的下一行,因此您的level
函数无法再次读取它。最好的解决方案(不需要更改很多代码)是让level
函数接受包含已读行的char []参数,而不是要读取的文件。
您还需要将do ... while
循环更改为while ...
函数内的menu
循环。
void level (int n , char* s , FILE*f2)
{
int i=0 ;
char k=0 ;
for (i=0 ; i< n ; i++ )
{
if (k != '\n')
{
k=*(s++) ; // get char from string
fputc(k,f2) ;
while ( k!='\\'&& k!=0 && k!='\n' )
{
k=*(s++) ; // get char from string
fputc(k,f2) ;
}
}
else
{
break ;
}
}
}
void menu (int n , FILE*f , FILE*f2)
{
char ch [1000] ;
while (fgets(ch,1000,f)!= NULL )
{
level(n,ch,f2) ;
fputc('\n',f2) ;
}
}