Results 1 to 8 of 8

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date: May:2012
    Location: Sliven
    Posts: 3

    Ôàéëîâå â Ñ++

    Çäðàâåéòå!
    Èìàì ïðîáëåì ñ èçòðèâàíå íà åëåìåíò îò äâîè÷åí ôàéë â Ñ++.
    Åëåìåíòèòå íà ôàéëà ñà ìè îò òèï ñòðóêòóðà ñ 4 ïîëåòà.
    Íÿêîé ìîæå ëè äà ìè ïîìîãíå.
    Ùå èçïðàòÿ êàêâî ñúì íàïèñàëà.

  2. #2
    ɐ-əpoɔᴉu⋂ ɐí íəÔ anrieff's Avatar
    Join Date: Apr:2004
    Location: Sofia
    Posts: 8,448
    Ïðàòè, äà ãè âèäèì. Êàêòî è îïèøè êàêúâ òî÷íî å ïðîáëåìúò.
    Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
    "640K îught to be enough for anybody" - Bill Gates, 1981
    Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel

  3. #3
    Registered 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 2rint();break;
    case 3:append();break;
    case 4:update();break;
    case 5:choose();break;
    case 6elete();break;
    default:exit(0); }
    }
    system("PAUSE");
    return 0;
    }

  4. #4
    Game programmer
    Join Date: Feb:2007
    Location: Ñîôèÿ
    Posts: 1,948
    Code:
    pos=sizeof(struct uchenik);
    f.seekg(pos,ios::end); //Pozicioniram predi posledniq element
    Àìè àêî ðàçìåðúò íà ôàéëà å ïî-ìàëúê îò ðàçìåðà íà struct uchenik?

    Edit:
    Íå å îò òîâà. Äðóãî íåùî èìà - ïî-êúñíî ùå ãî ïîòúðñÿ. Ìîæåø äà ñè ñëîæèø êîäà â CODE òàãîâå, çà äà íå òè ðàçâàëÿ ôîðìàòèðàíåòî è äà íå òè ñëàãà åìîòèêîíè.
    Last edited by Todor032; 2nd May 2012 at 17:29.
    3700X | 3070Ti | 64GB RAM | 2TB SSD | Seasonic 750W | FD Define 7 Mini

  5. #5
    ɐ-əpoɔᴉu⋂ ɐí íəÔ anrieff's Avatar
    Join Date: Apr:2004
    Location: Sofia
    Posts: 8,448
    Òî ïðîáëåìúò å, ÷å 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

  6. #6
    Registered 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;
    }

  7. #7
    Êèñåëèÿ ÷îâåê™
    Join Date: Apr:2006
    Location: Ñîôèÿ
    Posts: 8,666
    Quote Originally Posted by anrieff View Post
    Íî äîðè òàêà, ïàê ùå èìà ïðîáëåì, àêî èçòðèâàíèÿ çàïèñ ñå îêàæå ïîñëåäíèÿò âúâ ôàéëà.
    Ìè ... íåìà ëè äà å ïî-ëåñíî string literal comparison äîêàòî getline-âàìå? Ïîñëå ñàìî äîáàâÿìå íîâèÿò çàïèñ ñ CRLF íàêðàÿ, ïðåäè ðåäà êúäåòî ñìå îòêðèëè ñúâïàäåíèåòî? Ìàëêî ãèìíàñòèêà ñ áðîåíå íà ðåäîâåòå, ìà òî ñè å êëàñèêà (ïîíå àç íå ìîãà äà ñïðà äà ãî ïîëçâàì ). Àêî íÿìà äà òðèåì, à ùå äîáàâÿìå ... òàêà è íå ðàçáðàõ êàêâî òî÷íî ùå ñå ïðàâè ñ åëåìåíòà.
    Last edited by smelkomar; 2nd May 2012 at 23:20.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Copyright © 1999-2011 Õàðäóåð ÁÃ. Âúçìîæíî å ñúäúðæàíèåòî íà òàçè ñòðàíèöà äà å îáåêò íà àâòîðñêè ïðàâà.
iskamPC.com | mobility.BG | Bloody's Techblog | Êðèïòîâàëóòè è ìàéíèíã | 3D Vision Blog | Ìàãàçèí çà åëåêòðîííè öèãàðè