修正行数读取函数的语法

Fixing syntax of number of line reading function

本文关键字:函数 语法 读取      更新时间:2023-10-16

我之前试过编写一个程序,告诉用户文本文件中的字符、单词和行数。我编写了函数来确定每个元素的数量,但我是按值传递它们的。这导致了一个错误,因为在读取char的数量之后,它将位于文件的末尾,然后其他两个输出为零。现在我似乎不能重写我的函数,以便每次检查字符,单词和行时打开和关闭文件。有人看到我的错误在哪里吗??谢谢!(现在只是复制并粘贴了我的一个函数)。

int num_of_lines(ifstream file)
{
    string myfile;
    myfile = argv[1];
    ifstream l;
    l.open(myfile);
    int cnt3 = 0;
    string str;
    while(getline(file, str))cnt3++;
    l.close();
    return(cnt3);
}

int main(int argc, char **argv)
{ 
    int num_of_char(ifstream file);
    string file;
    file = argv[1];
    if(argc == 1)die("usage: mywc your_file"); 
    ifstream ifs;
    ifs.open(file);
    if(ifs.is_open())
    {
        int a, b, c;
        a = num_of_lines(ifs);
        cout <<"Lines: " << a << endl;
    }
    else
    {
        cerr <<"Could not open: " << file << endl;
        exit(1);
    }
    ifs.close();
    return(0);
}

除了知道名称并创建新的seekg之外,没有办法"重新打开"文件,但是您可以使用CC_2成员函数来设置文件中的读取位置,并将其设置为0将使下一次读取操作从文件的开头开始。

流是不可能复制的,所以你不能"按值"传递它,而必须通过引用传递它。

int num_of_lines(ifstream &file)
{
    int count = 0;
    string str;
    while (getline(file, str)) {
        count++;
    }
    file.seekg(0);
    return count;
}

对于整个问题,我同意Mats Petersson的观点。一次计算字符、行和单词比三次读取文件要高效得多。