问题描述
我尝试打开一个文本文件并将所有值分配给不同的向量,以便以后能够单独对每个人进行操作。就我而言,它告诉我该文件未包含在目录中。我在项目文件夹和我的桌子上确实有 .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;
}