我如何阅读数据直到行尾?我有一个文本文件“file.txt”与此
1 5 9 2 59 4 6
2 1 2
3 2 30 1 55
我有这段代码:
ifstream file("file.txt",ios::in);
while(!file.eof())
{
....//my functions(1)
while(?????)//Here i want to write :while (!end of file)
{
...//my functions(2)
}
}
在我的函数中(2)我使用了行中的数据,它需要是Int,而不是char
答案 0 :(得分:5)
不要使用while(!file.eof())
因为eof()
只会在读取文件末尾后设置。它并不表示下一次读取将是文件的结尾。您可以改为使用while(getline(...))
并与istringstream
结合使用来读取数字。
#include <fstream>
#include <sstream>
using namespace std;
// ... ...
ifstream file("file.txt",ios::in);
if (file.good())
{
string str;
while(getline(file, str))
{
istringstream ss(str);
int num;
while(ss >> num)
{
// ... you now get a number ...
}
}
}
您需要阅读Why is iostream::eof inside a loop condition considered wrong?。
答案 1 :(得分:2)
至于阅读直到行尾。有std::getline
。
你有另一个问题,那就是你循环while (!file.eof())
,这很可能不会像你期望的那样工作。原因是在之后尝试从文件末尾读取之后才设置eofbit
标志。相反,你应该做,例如while (std::getline(...))
。
答案 2 :(得分:1)
char eoln(fstream &stream) // C++ code Return End of Line
{
if (stream.eof()) return 1; // True end of file
long curpos; char ch;
curpos = stream.tellp(); // Get current position
stream.get(ch); // Get next char
stream.clear(); // Fix bug in VC 6.0
stream.seekp(curpos); // Return to prev position
if ((int)ch != 10) // if (ch) eq 10
return 0; // False not end of row (line)
else // (if have spaces?)
stream.get(ch); // Go to next row
return 1; // True end of row (line)
} // End function
答案 3 :(得分:0)
如果你想把它写成函数以便调用某些地方,你可以使用向量。这是一个函数,我用它来读取这样的文件并返回整数元素。
vector<unsigned long long> Hash_file_read(){
int frames_sec = 25;
vector<unsigned long long> numbers;
ifstream my_file("E:\\Sanduni_projects\\testing\\Hash_file.txt", std::ifstream::binary);
if (my_file) {
//ifstream file;
string line;
for (int i = 0; i < frames_sec; i++){
getline(my_file, line);
numbers.push_back(stoull(line));
}
}
else{
cout << "File can not be opened" << endl;
}
return numbers;
}