C ++:尝试逐行读取文件,保存到向量中,然后打印向量不打印任何内容

时间:2017-08-05 19:02:19

标签: c++ vector ifstream

我正在尝试从文件中读取并将数据插入到矢量中。该文件看起来像:

16
0100
0111
0111
0001
0100
1011
1010
0010
0110
1001
1100
1001
1100
0101
0101
0001

我希望我的矢量看起来像:

16 0 1 0 0 0 1 1 1 0 1 1 1...

我的代码如下所示:

void readFile(string name){
    ifstream fin;
    vector<int> graphData;
    int y;
    fin.open(name);
    if (!fin.is_open()){
        cout << "Error: Could not open data.";

    }
    else{
        while(!fin.eof()){
            fin >> y;
            graphData.push_back(y);
        }

    }
    fin.close();
    for(int i = 0; i < graphData.size(); ++i){
        cout << graphData[i] << " ";
    }
}

我很确定问题在于我定义y然后尝试将其推入。但是当我运行代码时,没有输出任何内容,因为向量是空的。

3 个答案:

答案 0 :(得分:1)

尝试将数字作为字符串读取:

unsigned int quantity = 0;
fin >> quantity;
fin.ignore(100000, '\n');
std::string number_text;
vector<int> binary;
while (getline(fin, number_text))
{
  for (int i = 0; i < number_text.length())
  {
    int bit = number_text[i] - '0';
    binary.push_back(bit);
  }
}

答案 1 :(得分:1)

您可以 - 在跳过行数后 - 读取每个字符并将其与'0''1'进行比较。请参阅以下代码:

int main() {

    vector<bool> bits;
    ifstream f(DATAFILE);
    if (f.is_open()) {
        int dummy;
        f >> dummy;
        char c;
        while (f >> c) {
            if (c == '1') {
                bits.push_back(true);
            }
            else if (c=='0') {
                bits.push_back(false);
            }
        }
        f.close();
        for(int i = 0; i < bits.size(); ++i){
            cout << bits[i] << " ";
        }
    }
    return 0;
}

答案 2 :(得分:0)

您应该使用getline函数逐行获取输入: 在fin.open(name);

之后

这样做:

getline(fin,line);

然后将line保存到您的