C++ 我能';t使用getline()读取一行
我有一门课:C++ 我能';t使用getline()读取一行,c++,visual-studio-2010,file,getline,C++,Visual Studio 2010,File,Getline,我有一门课: class DataBase{ private: fstream db_file; public: DataBase(){ db_file.open("db.txt", std::ios::in | std::ios::out); } void couteverything(){ string line; if(db_file.good() && db_file.is_open()){
class DataBase{
private:
fstream db_file;
public:
DataBase(){
db_file.open("db.txt", std::ios::in | std::ios::out);
}
void couteverything(){
string line;
if(db_file.good() && db_file.is_open()){
getline(db_file, line);
cout << line;
cout << "ok";
}
}
~DataBase(){
db_file.close();
}
};
类数据库{
私人:
fstream数据库文件;
公众:
数据库(){
db|u file.open(“db.txt”,std::ios::in | std::ios::out);
}
void couteverything(){
弦线;
if(db_file.good()&&db_file.is_open()){
getline(db_文件,行);
Cuth在构造函数中,不测试文件是否成功打开。因此,您不知道文件是否成功打开。因此,您的<代码> CouthVelyTys<代码>方法无法区分EOF与“未能打开”。您可以考虑添加一个检查:
DataBase(){
db_file.open("db.txt", std::ios::in | std::ios::out);
if (!db_file.is_open() || !db_file.good()) {
// put an error message here, or throw an exception. Up to you.
}
}
一旦进入couteverything()
,您可能希望在整个文件上循环。您需要的是循环,而不是if
语句。类似如下:
while (getline(db_file, line)) {
cout << line;
cout << "ok";
}
如果您一次只想输出一行,我不确定调用它的代码如何知道何时停止。但是,这是另一个问题。(提示:您可以通过每次一行的方法返回bool
来解决此问题。)您的文件是否以换行符开头?当您说屏幕上没有显示任何内容时,这是否包括“确定”?如果是,那么要么db\u file.good()
返回false,要么db\u file.open()
返回false,要么您没有调用couteverything()
。请尝试其他方法{cout Put a std::clog文件在当前目录中吗?
if (getline(db_file, line)) {
cout << line;
cout << "ok";
}