Results 1 to 8 of 8
Thread: Ôàéëîâå â Ñ++
Hybrid View
-
2nd May 2012 15:35 #1Registered User
Join Date: May:2012
Location: Sliven
Posts: 3
Ôàéëîâå â Ñ++
Çäðàâåéòå!
Èìàì ïðîáëåì ñ èçòðèâàíå íà åëåìåíò îò äâîè÷åí ôàéë â Ñ++.
Åëåìåíòèòå íà ôàéëà ñà ìè îò òèï ñòðóêòóðà ñ 4 ïîëåòà.
Íÿêîé ìîæå ëè äà ìè ïîìîãíå.
Ùå èçïðàòÿ êàêâî ñúì íàïèñàëà.
-
2nd May 2012 15:43 #2
Ïðàòè, äà ãè âèäèì. Êàêòî è îïèøè êàêúâ òî÷íî å ïðîáëåìúò.
Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
2nd May 2012 16:40 #3Registered User
Join Date: May:2012
Location: Sliven
Posts: 3
Ïðîáëåìúò ìè å ñ ôóíêöèÿòà Delete(). Âñè÷êè äðóãè ðàáîòÿò.
Èäåÿòà ìè å:
Äà çàïèøà øîñëåäíèÿ åëåìåíò â ïðîìåíë. temp.
Äà çàïî÷íà äà ÷åòà ôàéëà îòíà÷àëî è êàòî ïðî÷åòå åëåìåíòà, êîéòî ùå èçòðèâàì, äà ñå âúðíà ïðåäè íåãî è äà çàïèøà ïîñëåäíèÿ - temp, âúðõó íåãî.
Òàêà òðÿáâà äà èìàì ïîñëåäíèÿ åëåìåíò íà 2 ìåñòà.
Êàòî êîìïèëèðàì íå ìè äàâà ãðåøêà, ïðè Run è óçáîð íà Delete() ìå èçõâúðëÿ îò êîíçîëàòà.
À òðÿáâà è äà ïðîìåíà ðàçìåðà íà ôàéëà - äà ãîíàìàëÿ ñúñ sizeof(struct uchenik), íî íå ìîãà äà îïðàâÿ äðóãîòî ïðåäè òîâà.
--------- Äîáàâåíî â 16:40 --------- Ïðåäèøíî ìíåíèå: â 16:37 ---------
Åòî êîäà:
#include <iostream>
#include <fstream>
#include <fcntl.h>
using namespace std;
struct uchenik
{unsigned nom;
char ime[20];
char egn[11];
float usp;
}u;
void create ()
{ ofstream f;
f.open("klas.dat",ios:
ut);
if (!f) {cout<<"Error"<<"\n";
system("pause");
return ;}
int n=-1;
while (n!=0)
{cout<<"Nomer: "; cin>>u.nom;
cout<<"Ime: ";cin>>u.ime;
cout<<"EGN: "; cin>>u.egn;
cout<<"Uspeh: "; cin>>u.usp;
f.write((const char*)&u,sizeof(struct uchenik));
cout<<"Nov zapis: 1-da,0-ne"<<"\n";
cin>>n; }
f.close();
}
void print()
{ ifstream f;
f.open("klas.dat",ios::in);
if (!f) {cout<<"Error"<<"\n";
system("pause");
return ;}
while (!f.eof())
{if(!(f.read((char*)&u,sizeof(struct uchenik))))break;
cout<<"Nomer: "<<u.nom<<endl;
cout<<"Ime: "<<u.ime<<endl;
cout<<"EGN: "<<u.egn<<endl;
cout<<"Uspeh: "<<u.usp<<endl<<endl;
}
f.close();
}
void append()
{ ofstream f;
f.open("klas.dat",ios::app);
if (!f) {cout<<"Error"<<"\n";
system("pause");
return ;}
int n=-1;
while (n!=0)
{cout<<"Nomer: "; cin>>u.nom;
cout<<"Ime: ";cin>>u.ime;
cout<<"EGN: "; cin>>u.egn;
cout<<"Uspeh: "; cin>>u.usp;
f.write((const char*)&u,sizeof(struct uchenik));
cout<<"Nov zapis: 1-da,0-ne"<<"\n";
cin>>n; }
f.close();
}
void update()
{unsigned long pos;
fstream f;
f.open("klas.dat",ios::in|ios:
ut|ios::binary);
if (!f) {cout<<"Error"<<"\n";
system("pause");
return ;}
unsigned search_nom;
float ocenka;
cout<<"Vyvedi tyrseniq nomer: ";cin>>search_nom;
cout<<"Vyvedi nova ocenka: ";cin>>ocenka;
f.seekg(0,ios::beg);
while (f.read((char*)&u,sizeof(struct uchenik)))
{
if(u.nom==search_nom)
{
u.usp=ocenka;
pos=f.tellg();
pos=pos-sizeof(struct uchenik);
cout << pos <<sizeof(struct uchenik)<< endl;
f.seekg(pos);
//cout<<f.tellp();
//cout<<u.usp;
f.write((const char*)&u,sizeof(struct uchenik));
//cout<<f.tellp()<<endl;
}
}
f.close();
}
void choose()
{ifstream f;
float oc1, oc2;
cout<<"Vyvedete interval v kojto tyrsite ocenka: "<<endl;
cout<<"Nachalna ocenka: ";cin>>oc1;
cout<<"Krajna ocenka: ";cin>>oc2;
f.open("klas.dat",ios::in);
if (!f) {cout<<"Error"<<"\n";
system("pause");
return ;}
while (!f.eof())
{if(!(f.read((char*)&u,sizeof(struct uchenik))))break;
if((u.usp>=oc1)and(u.usp<=oc2))
{cout<<"Nomer: "<<u.nom<<endl;
cout<<"Ime: "<<u.ime<<endl;
cout<<"EGN: "<<u.egn<<endl;
cout<<"Uspeh: "<<u.usp<<endl<<endl;
}
}
f.close();
}
void Delete()
{unsigned long pos;
fstream f;
struct uchenik temp;
f.open("klas.dat",ios::in|ios:
ut|ios::binary);
if (!f) {cout<<"Error"<<"\n";
system("pause");
return ;}
unsigned search_nom;
pos=sizeof(struct uchenik);
f.seekg(pos,ios::end); //Pozicioniram predi posledniq element
f.read((char*)&temp,sizeof(struct uchenik)); //pro`itam posledniq v promenliva temp
cout<<"Vyvedi tyrseniq nomer: ";cin>>search_nom;
f.seekg(0,ios::beg); //pozicionoram fajlowiq ukazatel w na`aloto na fajla
while (f.read((char*)&u,sizeof(struct uchenik)))
{
if(u.nom==search_nom)
{
pos=f.tellg(); //poziciqta na ukazatelq sled tozi, kojto trqbwa da iztriq
pos=pos-sizeof(struct uchenik); //poziciatana ukazatelq predi elementa kojto shte se iztriwa
f.seekg(pos);//premestwam ukazatelq predi elementa kojto shte se iztriwa
//cout<<f.tellp();
f.write((const char*)&temp,sizeof(struct uchenik)); //zapiswam posledniq vyrhu tozi, kojto shte se iztriva
cout<<endl;
//cout<<f.tellp()<<endl;
}
}
f.close();
}
int main()
{ int op=-1;
while (op!=0)
{cout<<"izberete funciq:"<<endl;
cout<<" 1-sazdavane na fail\n"<<endl;
cout<<" 2-izvejdane na fail\n"<<endl;
cout<<" 3-dobavqne na u4enik\n"<<endl;
cout<<" 4-promqna na ocenka\n"<<endl;
cout<<" 5-izbor po uspeh\n"<<endl;
cout<<" 6-iztrivane\n"<<endl;
cout<<"vsi4ko drugo-krai\n"<<endl;
cin>>op;
switch (op)
{ case 1: create();break;
case 2
rint();break;
case 3:append();break;
case 4:update();break;
case 5:choose();break;
case 6
elete();break;
default:exit(0); }
}
system("PAUSE");
return 0;
}
-
2nd May 2012 17:08 #4Game programmer
Join Date: Feb:2007
Location: Ñîôèÿ
Posts: 1,948
Àìè àêî ðàçìåðúò íà ôàéëà å ïî-ìàëúê îò ðàçìåðà íà struct uchenik?Code:pos=sizeof(struct uchenik); f.seekg(pos,ios::end); //Pozicioniram predi posledniq element

Edit:
Íå å îò òîâà. Äðóãî íåùî èìà - ïî-êúñíî ùå ãî ïîòúðñÿ. Ìîæåø äà ñè ñëîæèø êîäà â CODE òàãîâå, çà äà íå òè ðàçâàëÿ ôîðìàòèðàíåòî è äà íå òè ñëàãà åìîòèêîíè.Last edited by Todor032; 2nd May 2012 at 17:29.
3700X | 3070Ti | 64GB RAM | 2TB SSD | Seasonic 750W | FD Define 7 Mini
-
2nd May 2012 17:27 #5
Òî ïðîáëåìúò å, ÷å seekg(pos, ios::end) ùå ïîçèöèîíèðà óêàçàòåëÿ pos áàéòà ÑËÅÄ êðàÿ íà ôàéëà.
Ïðàâèëíîòî å f.seekg(-pos, ios::end)
Íî äîðè òàêà, ïàê ùå èìà ïðîáëåì, àêî èçòðèâàíèÿ çàïèñ ñå îêàæå ïîñëåäíèÿò âúâ ôàéëà.Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
2nd May 2012 19:29 #6Registered User
Join Date: May:2012
Location: Sliven
Posts: 3
Åòî êîäà îùå âåäíúæ:
Code:#include <iostream> #include <fstream> #include <fcntl.h> using namespace std; struct uchenik {unsigned nom; char ime[20]; char egn[11]; float usp; }u; void create () { ofstream f; f.open("klas.dat",ios::out); if (!f) {cout<<"Error"<<"\n"; system("pause"); return ;} int n=-1; while (n!=0) {cout<<"Nomer: "; cin>>u.nom; cout<<"Ime: ";cin>>u.ime; cout<<"EGN: "; cin>>u.egn; cout<<"Uspeh: "; cin>>u.usp; f.write((const char*)&u,sizeof(struct uchenik)); cout<<"Nov zapis: 1-da,0-ne"<<"\n"; cin>>n; } f.close(); } void print() { ifstream f; f.open("klas.dat",ios::in); if (!f) {cout<<"Error"<<"\n"; system("pause"); return ;} while (!f.eof()) {if(!(f.read((char*)&u,sizeof(struct uchenik))))break; cout<<"Nomer: "<<u.nom<<endl; cout<<"Ime: "<<u.ime<<endl; cout<<"EGN: "<<u.egn<<endl; cout<<"Uspeh: "<<u.usp<<endl<<endl; } f.close(); } void append() { ofstream f; f.open("klas.dat",ios::app); if (!f) {cout<<"Error"<<"\n"; system("pause"); return ;} int n=-1; while (n!=0) {cout<<"Nomer: "; cin>>u.nom; cout<<"Ime: ";cin>>u.ime; cout<<"EGN: "; cin>>u.egn; cout<<"Uspeh: "; cin>>u.usp; f.write((const char*)&u,sizeof(struct uchenik)); cout<<"Nov zapis: 1-da,0-ne"<<"\n"; cin>>n; } f.close(); } void update() {unsigned long pos; fstream f; f.open("klas.dat",ios::in|ios::out|ios::binary); if (!f) {cout<<"Error"<<"\n"; system("pause"); return ;} unsigned search_nom; float ocenka; cout<<"Vyvedi tyrseniq nomer: ";cin>>search_nom; cout<<"Vyvedi nova ocenka: ";cin>>ocenka; f.seekg(0,ios::beg); while (f.read((char*)&u,sizeof(struct uchenik))) { if(u.nom==search_nom) { u.usp=ocenka; pos=f.tellg(); pos=pos-sizeof(struct uchenik); cout << pos <<sizeof(struct uchenik)<< endl; f.seekg(pos); //cout<<f.tellp(); //cout<<u.usp; f.write((const char*)&u,sizeof(struct uchenik)); //cout<<f.tellp()<<endl; } } f.close(); } void choose() {ifstream f; float oc1, oc2; cout<<"Vyvedete interval v kojto tyrsite ocenka: "<<endl; cout<<"Nachalna ocenka: ";cin>>oc1; cout<<"Krajna ocenka: ";cin>>oc2; f.open("klas.dat",ios::in); if (!f) {cout<<"Error"<<"\n"; system("pause"); return ;} while (!f.eof()) {if(!(f.read((char*)&u,sizeof(struct uchenik))))break; if((u.usp>=oc1)and(u.usp<=oc2)) {cout<<"Nomer: "<<u.nom<<endl; cout<<"Ime: "<<u.ime<<endl; cout<<"EGN: "<<u.egn<<endl; cout<<"Uspeh: "<<u.usp<<endl<<endl; } } f.close(); } void Delete() { unsigned long pos; fstream f; struct uchenik temp; f.open("klas.dat",ios::in|ios::out|ios::binary); if (!f) {cout<<"Error"<<"\n"; system("pause"); return ;} unsigned search_nom; pos=sizeof(struct uchenik); f.seekg(-pos,ios::end); //Pozicioniram predi posledniq element f.read((char*)&temp,sizeof(struct uchenik)); //pro`itam posledniq v promenliva temp cout<<"Vyvedi tyrseniq nomer: ";cin>>search_nom; f.seekg(0,ios::beg); //pozicionoram fajlowiq ukazatel w na`aloto na fajla while (f.read((char*)&u,sizeof(struct uchenik))) { if(u.nom==search_nom) { pos=f.tellg(); //poziciqta na ukazatelq sled tozi, kojto trqbwa da iztriq pos=pos-sizeof(struct uchenik); //poziciatana ukazatelq predi elementa kojto shte se iztriwa f.seekg(pos);//premestwam ukazatelq predi elementa kojto shte se iztriwa //cout<<f.tellp(); f.write((const char*)&temp,sizeof(struct uchenik)); //zapiswam posledniq vyrhu tozi, kojto shte se iztriva cout<<endl; //cout<<f.tellp()<<endl; } } f.close(); } int main() { int op=-1; while (op!=0) {cout<<"izberete funciq:"<<endl; cout<<" 1-sazdavane na fail\n"<<endl; cout<<" 2-izvejdane na fail\n"<<endl; cout<<" 3-dobavqne na u4enik\n"<<endl; cout<<" 4-promqna na ocenka\n"<<endl; cout<<" 5-izbor po uspeh\n"<<endl; cout<<" 6-iztrivane\n"<<endl; cout<<"vsi4ko drugo-krai\n"<<endl; cin>>op; switch (op) { case 1: create();break; case 2:print();break; case 3:append();break; case 4:update();break; case 5:choose();break; case 6:Delete();break; default:exit(0); } } system("PAUSE"); return 0; }
-
2nd May 2012 23:00 #7Êèñåëèÿ ÷îâåê™
Join Date: Apr:2006
Location: Ñîôèÿ
Posts: 8,666
Ìè ... íåìà ëè äà å ïî-ëåñíî string literal comparison äîêàòî getline-âàìå? Ïîñëå ñàìî äîáàâÿìå íîâèÿò çàïèñ ñ CRLF íàêðàÿ, ïðåäè ðåäà êúäåòî ñìå îòêðèëè ñúâïàäåíèåòî? Ìàëêî ãèìíàñòèêà ñ áðîåíå íà ðåäîâåòå, ìà òî ñè å êëàñèêà (ïîíå àç íå ìîãà äà ñïðà äà ãî ïîëçâàì
). Àêî íÿìà äà òðèåì, à ùå äîáàâÿìå ... òàêà è íå ðàçáðàõ êàêâî òî÷íî ùå ñå ïðàâè ñ åëåìåíòà.
Last edited by smelkomar; 2nd May 2012 at 23:20.




Reply With Quote

Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè