Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我能';t使用getline()读取一行_C++_Visual Studio 2010_File_Getline - Fatal编程技术网

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";
    }