c ++ открывает .txt файл и читает числа для размещения в массиве

0

У меня есть текстовый файл с номерами в одной строке (без пробелов между запятыми):

    -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

Теги:
file
file-io
fstream

4 ответа

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

2

Прежде всего, ваш входной файл не является двоичным - не используйте ios::binary.

Во-вторых, вам нужно разделить входные токены. Ваша операция ввода будет терпеть неудачу каждый раз, когда вы натыкаетесь на запятую. Возможно, вам понадобится ввести символ или строку, чтобы справиться с ними.

1

Ваш вход терпит неудачу, когда он пытается вставить a , в целое число. Вы должны использовать getline для вставки значений до разделителя запятой:

while (std::getline(fp, number, ','))
//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  • 0
    не нравится getline, я использую пространство имен std
  • 0
    @CRS Use #include <string>
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
  }
}

Вы должны сказать компьютеру пропустить запятые, это не сделает этого для вас.

  • 0
    все еще ничего не появляется в векторе чисел
  • 0
    @CRS Ваш код не проверяет, успешно ли вы открыли файл. Так что вполне вероятно, что не получается, и поэтому ничего не читается. Сделайте это, if (fp.is_open()) { ... } else { cout << failed to open file\n"; } и посмотрите, что произойдет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню