繁体   English   中英

从文件读取数据,输入文件名

[英]reading data from files, file name as input

我正在编写一个程序,该程序从作为输入字符串给出的不同文件中读取数据,并将其存储到向量的向量中。 我无法调试读取不同文件的循环的问题。 我已经关闭了ifstream对象,使用空函数清除了字符串...但是当我输入第二个文件名时,它仍然会终止。

我正在复制代码供您细阅。 这是另一个函数调用的函数。 转位器转置矩阵。

码:

vector<vector<float> > store1,store2;
ifstream bb;

string my_string;

float carrier;
vector<float> buffer;

cout<<"enter the file name"<<endl;
getline(cin,my_string);

while (my_string!="end")
{

    bb.open(my_string.c_str());
    while (!bb.eof())
    {
        bb >> carrier;

        if (bb.peek() == '\n' || bb.eof() )
        {
            buffer.push_back(carrier);
            store1.push_back(buffer);
            buffer.clear();
        }

        else
        {
            buffer.push_back(carrier);
        }


    }

    bb.close();
    buffer.clear();
    transposectr1(store1);
    storex.push_back(store1[1]);
    storey.push_back(store1[0]);
    store1.clear();
    my_string.empty();
    cout<<"done reading the file"<<endl;
    cout<<"enter the file name"<<endl;
    getline(cin,my_string);
}

我真的不清楚您要做什么。 但是在使用istream时,我有一个黄金法则:

切勿使用eof()函数!

它几乎可以肯定不会按照您的想法去做。 相反,您应该测试读取操作是否成功。

int x;

while( in >> x ) {
   // I read something successfully
}

您可能还希望避免使用peek()。 请牢记此建议,重新编写代码。

bb.clear();

在bb.close()之后,您可能会得到正确的东西。 bb.close()不会重置我认为的光标。

尼尔·巴特沃思(Neil Butterworth)是对的

切勿使用eof()函数!

此链接说明了原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM