Podzher
Сообщений: 2
Оценки: 0
Присоединился: 2008-11-24 23:54:24.673333
|
Доброе время суток!:) Господа, есть задачка: В середину двоичного файла целого типа поместить элементы этого файла, кратные пяти. Ниже предствлен листинг моей программы. Вопрос заключается в следующем: При выводе а экран компьютер выдаёт последний элемент дважды. Подскажите, в чём может быть проблема.:) #include <fstream> #include <iostream> #include <iomanip> using namespace std; # include <stdlib.h> #include <time.h> #define count 10 class bin_stream: public fstream // Переопрделяю класс fstream для записи\чтения в двоичный файл переменных различного типа { public: bin_stream(const char *str): fstream(str, ios::out | ios::in | ios::binary | ios::trunc) {} void doneOurDate(const void*, int, int); bin_stream &operator<<(int d) { doneOurDate(&d, sizeof(d),0); return *this; } bin_stream &operator>>(int &d) { doneOurDate(&d, sizeof(d),1); return *this; } }; int main() { int i, d, j=0, k = 0; time_t t; srand(time(&t)); // инициализировать генератор случайных чисел bin_stream bin_out("Bin.bin"); //исходный файл bin_stream bin_in("Bin2.bin"); //Конечный файл if (!bin_out && !bin_in) { cerr << "Unable to write to Bin.dat" << endl; exit(1); } for ( i = 0; i < count; i++ ) // Запись в исходный файл произвольных значений { d = rand() % 100; cout << setw( 3 )<< d; bin_out << d; } bin_out.seekg( 0, ios::beg ); // Вывод на экран первый файл cout << endl; for( i = 0; i<count; i++ ) { bin_out >> d; cout << setw( 3 ) << d; j++; } cout << endl; bin_out.seekg( 0, ios::beg ); for( i=0; i<( int )( j/2 ); i++ ) // Запись половины исходного файла во второй файл { bin_out >> d; bin_in << d; // cout << setw( 3 ) << d; } bin_out.seekg( 0, ios::beg ); for( i = 0; i<count; i++ ) // Запись во второй фал чисел из первого файла кратные 5 { bin_out >> d; if( d % 5 == 0 ) { bin_in << d; k++; } } bin_out.seekg( 0 , ios::beg ); for( i = 0; i< count; i++ ) // Запись во второй файл значений первого файла, находящихся во второй половине { bin_out >> d; if ( i>( int )( count/2 ) - 1 ){ bin_in << d; } } bin_in.seekg( 0, ios::beg ); while( !bin_in.eof() ) // Вывод второво файла { bin_in >> d; cout << setw( 3 ) << d; } return 0; } void bin_stream:: doneOurDate(const void *Ptr, int len, int sign) // Приведение различных типов к char { if (!Ptr) return; if (len <= 0) return; if (sign==0) write((char*)Ptr, len); else read((char*)Ptr, len); } p.s Заранее спасибо!:)
|