У меня есть текстовый файл с номерами в одной строке (без пробелов между запятыми):
-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. Кроме того, количество номеров в файле неизвестно, поэтому я хотел бы держаться подальше от hardcoding it
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
Прежде всего, ваш входной файл не является двоичным - не используйте ios::binary
.
Во-вторых, вам нужно разделить входные токены. Ваша операция ввода будет терпеть неудачу каждый раз, когда вы натыкаетесь на запятую. Возможно, вам понадобится ввести символ или строку, чтобы справиться с ними.
Ваш вход терпит неудачу, когда он пытается вставить a ,
в целое число. Вы должны использовать getline
для вставки значений до разделителя запятой:
while (std::getline(fp, number, ','))
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Как это
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
}
}
Вы должны сказать компьютеру пропустить запятые, это не сделает этого для вас.
if (fp.is_open()) { ... } else { cout << failed to open file\n"; }
и посмотрите, что произойдет.
#include <string>