如何打开文本文件并将所有值分配给 C++ 中的不同向量

问题描述

我尝试打开一个文本文件并将所有值分配给不同的向量,以便以后能够单独对每个人进行操作。就我而言,它告诉我该文件未包含在目录中。我在项目文件夹和我的桌子上确实有 .txt 文件。这是我的代码

int main(){
    
ifstream infile;
infile.open("D://jobs.txt");
vector<int>vec1;
vector<int>vec2;
vector<int>vec3;
int element1,element2,element3;

if(infile.fail()) //display error if the file Failed to open
{
cout<<"Input file Failed to open";
}
else
{
    while(infile>>element1 && infile >> element2 && infile>>element3)
    {
    vec1.push_back(element1);
    vec2.push_back(element2);
    vec3.push_back(element3);
    }
}



    return 0;
};

这是我的jobs.txt文件

1,18,3
2,5,1
3,14,5
4,1,1
5,17,0
6,2,6
7,6,2
8,15,7
9,20,0
10,8

解决方法

您没有验证 ifstream 是否成功打开文件。

但更重要的是,您没有处理整数之间的 , 字符。当 operator>> 正在读取一个整数时,它将停止读取它遇到的第一个非数字字符,将该字符留在流中。对 operator>> 的下一次调用将尝试读取一个整数,立即遇到该 , 并失败,使流处于您没有 clear() 的错误状态,因此过早地打破你的循环。

您需要读取并丢弃 , 字符。尝试更像这样的事情:

int main(){
    
    ifstream infile("D:\\jobs.txt");
    if (!infile.is_open()) {
        cerr << "Can't open file" << endl;
    }
    else {
        vector<int> vec1,vec2,vec3;
        int element1,element2,element3;
        char comma;

        while (infile >> element1 >> comma >> element2 >> comma >> element3)
        {
            vec1.push_back(element1);
            vec2.push_back(element2);
            vec3.push_back(element3);
        }
    }

    return 0;
}

Demo