程序不读取文件

时间:2013-06-15 08:30:21

标签: c++ file

当我运行它时,下面的程序似乎没有读取文件并输入文件的名称。可能是因为它不知道在哪里寻找它们?此外,我返回文件中行数的函数只返回它出现的内存地址。

#include <iostream>
#include <fstream>
#include<string>

using namespace std;

函数返回输入的txt文件中的字符数:

int return_Characters(ifstream& in) 
{
    int characters = in.gcount();

    return characters;
}

函数,假设获取txt文件中的行数并将该数字作为double返回:

double return_lines(ifstream& in) 
{
    string name;
    double lines = 0;

    while(getline(in, name) ){
        int count = 0;
        lines = count++;
    }

    return lines;
}

主要功能:

int main() 
{
    string file_name;
    ifstream input_file;


    cout << "Please enter the name of your file" << endl;

执行循环,读取用户输入的file_name字符串并运行函数以获取用户输入的txt文件中的字符数和行数:

    do {
        getline(cin, file_name);
        cout << "checking" << ' ' << file_name << endl;

        input_file.open(file_name);

        int count_characters = return_Characters(input_file);
        cout << "the number of characters is equal to " << count_characters << '\n';

        double count_lines = return_lines(input_file);
        cout << "the number of lines in the file is equal to" << return_lines << '\n';

        input_file.close();

    }while(!file_name.empty());

    cout << "there was an error oepning your file. The program will not exit" << endl;


    system("Pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

return_lines函数中,您将count声明为循环内的局部变量。这意味着它将始终在每次迭代时重置为零,从而导致lines也始终设置为零。

另一个问题是istream::gcount函数只返回从上一次输入操作中读取的字符数,因为你没有做任何输入,它总是返回零。

并且没有的理由使用double作为行数,因为你将永远不会,例如文件中的12.3行。使用int


您还应该检查文件操作是否成功。在return_lines中正确执行此操作时,不会检查文件的打开是否成功。

答案 1 :(得分:2)

此功能不会按照您的描述进行操作。它返回“在最近的读取操作中读取的字符数(例如,如果你执行in.getline(),那么这一行将返回该行的长度。)

int return_Characters(ifstream&amp; in)     {         int characters = in.gcount();

    return characters;
}

要找出文件的大小,您需要寻找到最后,获取位置,然后回头查看。虽然这对于某些系统上的文本文件是不可靠的,因为newline是文件中的两个字节,并且在C中仅计为“一个字符”。如果要计算文件中的字符数和行数,然后计算每行中的字符数(使return_lines也为其读取的字符数量设置一个参数)。