Столкнулся с такой проблемой: Написал программу чтения/записи в бинарный файл, записывает все значения (марка,модель,год,пробег) нормально,но читает только первую запись которая писалась под 0 смещением,потом при чтении хоть 10 смещение вводи все равно выдает запись по первому. Пересмотрел весь код ничего подозрительного не нашел,помогите решить проблему.
| Код | #include "stdafx.h" #include "iostream" #include "fstream" using namespace std; int get_int(int default_value); char model[21]; char mark[21]; char year[6]; int n,km,mnu;
int main(){ char filename[81]; cout<<"Enter filename: "; cin.getline(filename,80); fstream fbin(filename,ios::binary | ios::in | ios::out); if (!fbin){ cout<<"Could not open file "<<filename; return -1; } while (1){ int recsize=sizeof(model)+sizeof(mark)+sizeof(year)+sizeof(km); cout<<"1-Read/2-Write/ENTER-Exit: "; mnu=get_int(3); if (mnu==1){
cout<<"Enter file read number: "; n=get_int(0); fbin.seekp(n*recsize); fbin.read(mark,20); fbin.read(model,20); fbin.read(year,5); fbin.read(reinterpret_cast<char*>(&km),sizeof(int)); fbin.close(); cout<<mark<<endl; cout<<model<<endl; cout<<year<<endl; cout<<km<<endl; }else if(mnu==2){ cout<<"Enter file read number: "; n=get_int(0); fbin.seekp(n*recsize); cout<<"Enter mark car: "; cin.getline(mark,20); cout<<"Enter model car: "; cin.getline(model,20); cout<<"Enter year of the assembly: "; cin.getline(year,5); cout<<"Enter mileage: "; km=get_int(1000); fbin.write(mark,20); fbin.write(model,20); fbin.write(year,5); fbin.write(reinterpret_cast<char*>(&km),sizeof(int)); }else break; } return 0; } int get_int(int default_value){ char s[81]; cin.getline(s,80); if (strlen(s)==0) return default_value; return atoi(s); }
|
|