我知道输入文件的每一行都包含五个数字,我希望我的c ++程序能够在不询问用户的情况下自动确定文件中有多少行。有没有办法在不使用getline或字符串类的情况下执行此操作?
答案 0 :(得分:0)
我就是这样做的......
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string fileName = "Data.txt";
std::ifstream f(fileName, std::ifstream::ate | std::ifstream::binary);
int fileSize = f.tellg() / 5 * sizeof(int);
return 0;
}
代码假定一个名为Data.txt的文件,并且每行上的5个数字都是int类型,并且不用空格或分隔符分隔。请记住,在文本文件的情况下,每一行都将终止到换行符,因此这种技术(不考虑它们)会产生误导性结果。
答案 1 :(得分:0)
当然,您只需读取文件,同时检查转义序列。请注意,\n
转义序列在写入时转换为系统特定的换行符转义序列,反之亦然,在文本模式下读取。
通常,此代码段可能会对您有所帮助。
鉴于文件 somefile.txt
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
编译以下代码并输入文件名 somefile.txt
#include <iostream>
#include <fstream>
inline size_t newlineCount (std::istream& stream)
{
size_t linesCount = 0;
while (true)
{
int extracted = stream.get();
if (stream.eof()) return linesCount;
else if (extracted == '\n') ++linesCount;
}
}
int main(int argc, char* argv[])
{
std::string filename;
std::cout << "File: ";
std::cin >> filename;
std::ifstream fileStream;
fileStream.exceptions(fileStream.goodbit);
fileStream.open(filename.c_str(), std::ifstream::in);
if (!fileStream.good())
{
std::cerr << "Error opening file \"" << filename << "\". Aborting." << std::endl;
exit(-1);
}
std::cout << "Lines in file: " << newlineCount(fileStream) << std::endl;
fileStream.close();
}
提供输出
File: somefile.txt
Lines in file: 4