控制文本文件中的光标位置

时间:2015-03-27 22:07:06

标签: c

#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;下一行,但它在下一行之后得到了一行,我需要一个解决方案。

1 个答案:

答案 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) ;
    }
}
相关问题