Дублирование последнего числа в ListBox

120
21 января 2021, 02:10

Мне нужно считать все числа из файла в бинарном режиме (мне принципиально важно именно в этом режиме считывать числа) и добавить в ListBox. По непонятной причине у меня дублируется число.

В данном случае я записал цифру 1 РОВНО ОДИН РАЗ и она добавилась 2 раза в ListBox.

private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {
        int n = 0;
        String^g = "";
        ifstream d;
        d.open("12.dat", ios::binary);
         do {
            d.read((char*)&n, sizeof(int));
            g = System::Convert::ToString(n);
            listBox1->Items->Add(n);
         } while (!d.eof());
        d.close();

    }
Answer 1

Дело в том что read устанавливает eof только после попытки чтения, так что когда вы читаете, то вы должны проверить - а получили ли вы значение вообще? Cдесь можно обойтись вообще без условия, достаточно:

while(true) {
  if (read(.., ..))
    { ... }
  else
    break;
} 

В таком случае у вас при первой же проблеме со считыванием произойдет выход из цикла. А уж за пределами можно без труда проверить почему это произошло.

READ ALSO
Лягушки и их счастливые номера

Лягушки и их счастливые номера

Немножко про условие задачи : Дано N лягушек и бесконечное поле, в каждой лягушки есть свой счастливый порядковый номерЛягушки приходят по очереди...

110
Вывод текста в классе си++

Вывод текста в классе си++

Подскажите, пожалуйста, как вывести текст в классе

102
QLineEdit в центре QGridLayout ячейки

QLineEdit в центре QGridLayout ячейки

Имеется такой кодСоздается массив фреймов и массив QLineEdit

106
Обработка вариативного массива с++

Обработка вариативного массива с++

Подскажите плз как правильно передать вариативный массив в процедуру печати, если приходит args=(char const (&)[32])

117