Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
akrosing
1 / 1 / 0
Регистрация: 08.01.2009
Сообщений: 6
#1

Неожиданное окончание файла - C++

05.02.2010, 17:45. Просмотров 559. Ответов 4
Метки нет (Все метки)

Требуется организовать побитовое чтение файла (формат .dat) и компоновка (перестановка 2-х бит) в массив. Написал код. Возникла проблема: происходит неожиданный конец файла (eof) при 85 кадре (1 кадр = чтение 2-х бит). При чтении того же самого файла и вместо fin >> x1 использовать fin.get(x1) конец происходит на 83 кадре. Причём эти прочтённые кадры соответсвуют действительности( проверенно при чтении файла матлабом и маткадом) - всего кадров около 1000.
При чтении другого файла (той же размерности и структуре) неожиданный конец файла может возникать при других кадрах (к примеру 5-ый).
При чтении простого файла .txt, содержащего массив цифр - всё ок.
В чём может быть проблема?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (OpenDialog1->Execute())
{
    Edit1->Text = OpenDialog1->FileName;
    ifstream fin(OpenDialog1->FileName.c_str());
    int i=0;                      // счётчик, определяет номер кадра (1 кадр - 2 бита)
    short int str[100000];  // массив куда будут записываться значения из файла
 
    while ( (!fin.eof() ) & (i<100000))
    {
       char x1 , x2;
       fin >> x1; fin >> x2 ;  // запись последовательных 2-х битов х1 и х2.
 
      short int p2 = x2<<8 ;                 // меняем биты местами: х1 становится старшим битом
      unsigned short int p1 = x1 & 255 ; // х2 становится младшим битом
// в результате получили код аскии целого 4-х значного числа
// (Это известно из условия - информация 100% правильная)
 
      str[i] = int(p1+p2);                     // записываем результат в конечный массив
      i++;
    }
 
    fin.close();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2010, 17:45     Неожиданное окончание файла
Посмотрите здесь:

C++ Окончание файла
Неожиданное закрытие консольной программы C++
C++ Неожиданное завершение программы
C++ Неожиданное значение в статической переменной
C++ Проверка на окончание файла
Неожиданное завершение программы на Windows C++
C++ Неожиданное поведение fflush(), неправильная работа функции
C++ Неожиданное поведение программы: найти ошибку в коде
C++ Неожиданное поведение программы: почему не работает цикл do while?
C++ Неожиданное поведение программы: почему не работает цикл while?
C++ Неожиданное поведение программы: исправить ошибку в коде
C++ Неожиданное поведение программы: почему программа внезапно завершает работу?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JKeeJ1e30
12 / 12 / 0
Регистрация: 04.02.2010
Сообщений: 45
05.02.2010, 17:51     Неожиданное окончание файла #2
Скорее всего тут дело в выделении памяти под это чтение, особенно если ты говоришь что на других компиляторах все по-другому. Врядли тебе здесь ответят, надо рыться в технических тонкостях
akrosing
1 / 1 / 0
Регистрация: 08.01.2009
Сообщений: 6
06.02.2010, 00:25  [ТС]     Неожиданное окончание файла #3
Разобрался спасибо. Про "другие компиляторы" я вообще-то не писал...

Проблема оказалась не в памяти, а в самих битах в файле. Некоторые биты были управляющие, поэтому при чтении выполнялась их функция.
Всё разрешилось при использовании fin.get и вместо счётчика конца файла (!fin.eof()) использовать надо было длину файла, которую предварительно надо было найти.

В частности проблема была бы решена если бы чтение из файла сразу шло в переменную (лучше символьную) имеющую размерность 2 байта (один требуемый кадр) - тогда не нужно было бы менять местами байты. Использование short int никаких результатов не дало. Может есть другие более подходящие для этого типы?
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
06.02.2010, 17:27     Неожиданное окончание файла #4
Некоторые биты были управляющие, поэтому при чтении выполнялась их функция.
Почему ты байты называешь битами ?
akrosing
1 / 1 / 0
Регистрация: 08.01.2009
Сообщений: 6
07.02.2010, 09:58  [ТС]     Неожиданное окончание файла #5
Цитата Сообщение от odip Посмотреть сообщение
Почему ты байты называешь битами ?
Потому что иногда их путаю (не в смысле что они означают, а в смысле произношения). Везде где выше я написал бит подразумевается байт.
Yandex
Объявления
07.02.2010, 09:58     Неожиданное окончание файла
Ответ Создать тему
Опции темы

Текущее время: 00:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru