在C中以逆序输出文件中的文本

nlejzf6q  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(174)

我试着在C语言上做一个代码,它读取file.txt,将其输出到控制台,然后计算行数、字数等,最后将file.txt的内容导出到file2.txt,但顺序相反。

文本需要从以下内容开始:

我爱你
更改为:
是的
我的文本文件中有什么:enter image description here
我现在得到的代码:enter image description here
这是我的代码,需要改进,因为它打印的代码我需要,但与空白行,这是不需要的.它需要导出到另一个文件也:

fseek(fptr,0,SEEK_END);
        pos=ftell(fptr);
        i=0;
        while(i<pos)
            {
            i++;
            fseek(fptr,-i,SEEK_END);
            ch=fgetc(fptr);
            printf("%c",ch);
            }

下面是完整代码:

#include <stdio.h>

int main ()
{
    FILE *fptr;
    int i, n, j, pos;
    char str[100];
    char fname[20]="mfile.txt";
    char newch[500];
    int wrd=1,charctr=1,rows=1;
    char str1;
    char ch;
    int no_lines = 1;
    int COUNT = 0;

    fptr = fopen(fname,"r"); 
    if(fptr == NULL) 
     { 
        printf(" \n");
        printf("File does not exist or can not be opened."); 
      } 
    else 
        { 
          ch=fgetc(fptr); 
          printf(" \n");
          printf("The content of the file %s are: \n", fname);
          printf(" \n"); 
          while(ch != EOF) 
            { 
                printf("%c",ch); 
                if(ch==' '||ch=='\n')
                    {
                        wrd++; 
                    }
                    else
                    {
                        charctr++; 
                    }
                if(ch=='\n')
                    {
                        rows++;
                    }
                ch=fgetc(fptr); 
            }

        int wrd1 = wrd - 1;
        float charctr1 = charctr - 1;
        float rows1 = rows;
        float averageSymbol = charctr1 / rows1;

        printf(" \n");
        printf("\nwrd = %d, charctr = %d", wrd, charctr-1);
        printf("\nThe number of rows in the file %s are : %d\n", fname,rows);
        printf("\nThe average amount of symbols in a row is %f\n", averageSymbol);
        printf(" \n");

        }

        fseek(fptr,0,SEEK_END);
        pos=ftell(fptr);
        i=0;
        while(i<pos)
            {
            i++;
            fseek(fptr,-i,SEEK_END);
            ch=fgetc(fptr);
            printf("%c",ch);
            }

    fclose(fptr); 
    return 0;
}
bnlyeluc

bnlyeluc1#

好的,如果我理解正确的话,你想去掉代码中出现的一些空行,然后你还想把程序的输出(反转的文本)写入另一个文件?我假设你想让句子也按原来的顺序。

#include <stdio.h>

int main ()
{
    FILE *fptr;
    FILE *fptr2;
    int i, n, j, pos;
    char str[100];
    char fname[20]="mfile.txt";
    char fname2[20]="outputfile.txt";
    char newch[500];
    int wrd=1,charctr=1,rows=1;
    char str1;
    char ch;
    int no_lines = 1;
    int COUNT = 0;
    fptr2 = fopen(fname2, "w+");
    
    fptr = fopen(fname,"r"); 
    if(fptr == NULL) 
     { 
        printf(" \n");
        printf("File does not exist or can not be opened."); 
      } 
    else 
        { 
          ch=fgetc(fptr); 
          
          printf("The content of the file %s are: \n", fname);
          
          while(ch != EOF) 
            { 
                printf("%c",ch); 
                if(ch==' '||ch=='\n')
                    {
                        wrd++; 
                    }
                    else
                    {
                        charctr++; 
                    }
                if(ch=='\n')
                    {
                        rows++;
                    }
                ch=fgetc(fptr); 
            }

        int wrd1 = wrd - 1;
        float charctr1 = charctr - 1;
        float rows1 = rows;
        float averageSymbol = charctr1 / rows1;

        
        printf("\nwrd = %d, charctr = %d", wrd, charctr-1);
        printf("\nThe number of rows in the file %s are : %d\n", fname,rows);
        printf("The average amount of symbols in a row is %f\n", averageSymbol);
        

        }

        fseek(fptr,0,SEEK_END);
        pos=ftell(fptr);
        i=0;
        while(i<pos)
            {
            i++;
            fseek(fptr,-i,SEEK_END);
            ch=fgetc(fptr);
            printf("%c",ch);
            fputc(ch,fptr2);
            }

    fclose(fptr); 
    fclose(fptr2); 
    return 0;
}

这个版本首先检查一个名为outputfile.txt的文件是否存在,如果不存在,它就创建它。如果该文件已经存在,那么程序会用新的程序输出覆盖原来在文件中的内容(它不会完全清除该文件)。

相关问题