我有一个文本文件,其中一行上的数字(逗号之间没有空格):
-1,5,-3,10,500000,-6000
到目前为止,这是我的代码,但我在向量数组中没有得到任何回复
fstream fp;
vector<int> numbers;
int number;
fp.open("numbers.txt", ios::in | ios::binary);
if(fp.is_open()){
while(fp >> number){
numbers.push_back(number);
}
}
fp.close();
cout << "Numbers:\n";
for (int i=0; i < numbers.size(); i++) {
cout << numbers[i] << '\n';
}
我觉得我只是没有正确阅读文件,或者整条线只是放入数字var。此外,文件中的数字是未知的,所以我想远离硬编码
答案 0 :(得分:4)
fstream fp;
vector<int> numbers;
int number;
fp.open("numbers.txt", ios::in | ios::binary);
if(fp.is_open()){
while(fp >> number){
numbers.push_back(number);
fp.get();
}
}
fp.close();
cout << "Numbers:\n";
for (int i=0; i < numbers.size(); i++) {
cout << numbers[i] << '\n';
}
你忘记了逗号!使用fp.get();摆脱他们,然后它会工作正常:D
答案 1 :(得分:2)
首先,您的输入文件不是二进制文件 - 请勿使用ios::binary
。
其次,您需要拆分输入令牌。每次偶然发现逗号时,您的输入操作都会失败。您可能需要输入一个字符或字符串来处理它们。
答案 2 :(得分:1)
当您尝试将,
插入整数时,您的输入失败。您应该使用getline
将值插入到逗号分隔符:
while (std::getline(fp, number, ','))
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
答案 3 :(得分:0)
喜欢这个
if(fp.is_open()){
while(fp >> number){
numbers.push_back(number);
char dummy_variable_for_the_comma;
fp >> dummy_variable_for_the_comma; // read and discard a comma
}
}
您必须告诉计算机跳过逗号,它不会为您执行此操作。