我们可以使用两种不同的方法在同一代码块中读取文件吗?

问题描述

// 我用来从文件中读取单词,字符,空格,换行符的方法 // 但是,当我运行它时,只有上面的while被执行,如果我将下面的while循环放在首位, // 仅执行该操作。简而言之,只有一个while循环被执行。 // 我该如何解决

#include<stdlib.h>
#include<string.h> 
int count_items(FILE *f);
// MAIN CODE
int main()
{ 
    printf("-------Programm to count_items in a file-------\n");

    FILE *f = fopen("sample.txt","r");

    count_items(f);

    fclose(f);

    return 0; 
} 

//FUNCTION TO COUNT NUMBER OF ITEMS IN A FILE

int count_items(FILE *f)
{
    int word_count,line_count,white_count,char_count;
    char sbuff[100],cbuff;

    // **Method I`m using to read characters from a file..**

    while((cbuff=getc(f))!=EOF)
    {
        char_count++;

        if(cbuff=='\n')
        {
            line_count++;
        }
        if(cbuff==' ')
        {
            white_count++;
            
        }

    } 

    while(fscanf(f,"%s",sbuff)==1)
    {
        word_count++;
    }

    // PRINT THE RESULT
    printf("The number of words in file are %d\n\n",word_count );
    printf("The number of characters in file are %d\n\n",char_count );
    printf("The number of whitespaces in file are %d\n\n",white_count );
    printf("The number of lines in file are %d\n\n",line_count );

    return 0;
} ```

// **IT SEEMS THAT I NEED TO FLUSH THE BUFFER BEFORE GOING TO SECOND WHILE LOOP. IF SO,HOW DO I DO THAT?**

解决方法

我认为这是因为下一个循环正试图从文件中读取文件,而当前位置位于该文件的末尾。您需要从头开始设置当前位置,例如

fseek(f,SEEK_SET,0);

有关更多详细信息,请参见fseek规范。