В этом коде есть логическая ошибка, которую я не могу понять. Код написан на языке turbo c++.
#include<fstream.h> #include<process.h> #include<conio.h> #include<string.h> #include<stdlib.h> #include<stdio.h> class address { int hno; char street[30]; long int pin; public: void geta() { cout<<"Enter the house number "; cin>>hno; cout<<"Enter the street "; gets(street); cout<<"Enter the pin "; cin>>pin; } void showa() { cout<<"\nThe houseno"<<hno; cout<<"\nThe street "; puts(street); cout<<"\nThe pin "<<pin; cout<<endl; } }; class voter { char name[30]; int age; long int vid; char gender; address a; int lastvote; public: void getdata() { cout<<"Enter name"<<endl; gets(name); ifstream f2("Voter.dat" , ios::binary|ios::in); f2.read((char *) this , sizeof(voter)); f2.seekg(0,ios::end); vid = 1 + f2.tellg()/sizeof(voter) ; cout << "Your voter id is" << vid<<endl ; f2.close(); cout<<"Enter age (should be greaterthan or equal to 18)"<<endl; cin>>age; cout<<"Enter address"<<endl; a.geta(); cout<<"Enter gender (M / F)"<<endl; cin>>gender; cout<<"Enter the year when last voted (between 1900 and 2014;0 for never)"<<endl; cin>>lastvote; } void putdata() { cout<<"Name:"<<endl; puts(name); cout<<"Voter ID:"<<endl; cout<<vid << endl; cout<<"Age:"<<endl; cout<<age << endl ; cout<<"Address:"<<endl; a.showa() ; cout<<"Gender:"<<endl; cout<<gender << endl ; cout<<"Last time voted in the year:"<<endl; if (lastvote<1900 || lastvote>2014 || lastvote%5 !=4) cout<<"Inavlid input" << endl ; else if (lastvote==0) cout<<"Never casted a vote"<<endl; else cout<<lastvote << endl; } int ret() { return vid; } int retvote() { return lastvote; } void modify(void ); }v; void voter::modify(void ) { cout<<"Enter new data:"<<endl; cout<<"Enter name "<<endl; gets(name); cout<<"Enter age (should be greaterthan or equal to 18)"<<endl; cin>>age; cout<<"Enter address"<<endl; a.geta(); cout<<"Enter gender (M \ F)"<<endl; cin>>gender; cout<<"Enter the year when last voted (between 1900 and 2014;0 for never)"<<endl; cin>>lastvote; ; } void main() { clrscr(); int sw,pos,count,voted,p; int s,d,m; char test='n'; count=0; voted=0; fstream file; file.open("Voter.dat",ios::in|ios::app|ios::binary); file.close(); char ch='y'; cout<<"Enter a choice(1-7)"<<endl; do { cout<<"1.Register"<<endl; cout<<"2.View detials of a voter"<<endl; cout<<"3.View details of all the voters"<<endl; cout<<"4.Modify data"<<endl; cout<<"5.Delete data of a voter"<<endl; cout<<"6.Display percentage of people who voted in a particular year"<<endl; cout<<"7.Exit"<<endl; cin>>sw; switch(sw) { case 1: file.open("Voter.dat",ios::in|ios::out|ios::binary); v.getdata(); file.write((char*)&v,sizeof(v)); file.close(); break; case 2: file.open("Voter.dat",ios::in|ios::out|ios::binary); cout<<" Voter id : " << endl; cin >> s; file.seekg(0,ios::beg); while(!file.eof()) { file.read((char*)&v,sizeof(v)); if(v.ret()==s) { v.putdata(); test='y'; break; } } if(test=='n') { cout<<"Voter ID not found"<<endl; } file.close(); break; case 3: file.open("Voter.dat",ios::in|ios::out|ios::binary); file.seekg(0,ios::beg); while(!file.eof()) { file.read((char*)&v,sizeof(v)); if(file.eof()) break; v.putdata(); } file.close(); break; case 4: file.open("Voter.dat",ios::in|ios::out|ios::binary); cout<<"Enter the voter ID of record to be edited: "<<endl; cin>>m; file.read((char*)&v,sizeof(v)); file.seekg(0,ios::end); if(file.tellg() >= sizeof(voter) * m) { pos = (m-1)*sizeof(voter); file.seekp(pos); v.modify(); file.write((char*)&v,sizeof(v)); test='y'; } if (test=='n') { cout<<"Record with voter ID:"<<m<<"not found"<<endl; } cout<<"Now the file contains"<<endl; file.seekg(0,ios::beg); while(!file.eof()) { file.read((char*)&v,sizeof(v)); v.putdata(); } file.close(); break; case 5: file.open("Voter.dat",ios::in|ios::out|ios::binary); cout<<"Enter the voter ID ofrecord to be deleted"<<endl; cin>>d; file.seekg(0,ios::beg); fstream filetemp; filetemp.open("Temp.dat",ios::out || ios::binary); while(!file.eof()) { file.read((char*)&v,sizeof(v)); if(v.ret()==d) { test='y'; } else { filetemp.write((char*)&v,sizeof(v)); } } if(test=='n') cout<<"Record not found"<<endl; file.close(); filetemp.close(); remove("Voter.dat"); rename("Temp.dat","Voter.dat"); file.open("Voter.dat",ios::in|ios::out|ios::binary); cout<<"Now the file contains"<<endl; file.seekg(0,ios::beg); while(!file.eof()) { file.read((char*)&v,sizeof(v)); v.putdata(); } file.close(); break; case 6: file.open("Voter.dat",ios::in|ios::out|ios::binary); cout<<"Enter the year to display percentage voters of that year"<<endl; cin>>p; file.seekg(0,ios::beg); while(!file.eof()) { file.read((char*)&v,sizeof(v)); if(v.retvote()==p) { count++; voted++; } else count++; } cout<<"Percentage voters is : "<<(voted/count)*100<<endl; file.close(); break; case 7: exit(0); break; default : cout<<"Invalid input"<<endl; break; } cout<<"Do you want to continue?(Y/N)"<<endl; cin>>ch ;}while ( ch=='y' || ch=='Y' ); getch();}
Что я уже пробовал:
Я думал об этом в течение нескольких недель, но я не в состоянии понять свою ошибку. Было бы очень хорошо, если бы вы могли помочь. Код написан с использованием обработки файлов данных и является моим проектом для класса 12. Так что это действительно важно для меня.
CPallini
И что же это за дурное поведение?
Richard MacCutchan
Почему вы смешиваете cin/gets и cout/puts? Используйте одно или другое. Что касается вашей логической ошибки, вам нужно объяснить, где она находится, мы не можем догадаться, что должен делать весь этот код.
И то, что вы говорите нам, что это важно для вас, не оставляет никаких сомнений. Проблемы каждого важны для них, но не для волонтеров здесь - которые предоставляют эту услугу бесплатно для вас.