当我运行它时,下面的程序似乎没有读取文件并输入文件的名称。可能是因为它不知道在哪里寻找它们?此外,我返回文件中行数的函数只返回它出现的内存地址。
#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;
}
答案 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
也为其读取的字符数量设置一个参数)。