Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[C++] Zapis danych do pliku

07 Jul 2006 14:41 27884 8
  • Level 25  
    Napisa│em bardzo prosty program do obliczenia pewnych wartoÂci ale przyda│o by siŕ w nim dodaŠ opcje zapisywania wynikˇw oblicze˝ do pliku txt. Skleci│em co takiego ale co nie chce dzia│aŠ :(

    Code:
    #include <cstdlib.h>
    
    #include <fstream.h>
    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    #include <vector.h>

    using namespace std;

    int main(int argc, char *argv[])
    {
      vector<string>v_s;
      string nr, st1,a ,b, c, y;
     
      char wybor;
        cout << "╔════════════════════════════════════════════════════════»" << endl ;
        cout << "║ Obliczanie \230redniej zawarto\230ci popio\210u w badanym w\251glu ║" << endl ;
        cout << "║                                                        ║" << endl ;
        cout << "║                          m3 - m1                       ║" << endl ;
        cout << "║                  alfa = ───────── * 100%               ║" << endl ;
        cout << "║                          m2 - m1                       ║" << endl ;
        cout << "╚════════════════════════════════════════════════════════ą" << endl ;



      ifstream ifile("test.txt");
      if (ifile==NULL)
      { perror ("Brak pliku,nastapi utworzenie pliku i na nowo uruchom");
      cout << "Podaj numer pomiaru: " ; cin >>nr;
      st1="Nr."+nr+" m1= "+a+" m2= "+b+" m3= "+c;
      ofstream ofile("test.txt");
      ofile<<st1;
      ofile.close(); ifile.close();exit(0);
      }
      else
      {
      while(!ifile.eof())
      {
      getline(ifile,st);
      v_s.push_back(st);
      }
      ofstream ofile("test.txt");
      for(int i=0;i<v_s.size();i++)
      {
      ofile<<v_s[i]<<"\n";
      }
      ofile.close(); ifile.close();
      }




      while(1)
      {
        cout <<"\n Wybierz odpowiedni\245 opcj\251:\n";
        cout <<" 1. Podaj dan\251.\n";
        cout <<" 2. Zapis danych.\n";
        cout <<" 3. Odczyt danych.\n";
        cout <<" 0. Wyj\230cie.\n";
       
        switch(getch())
        {
          case '1':
          {
              cout << " \n Podaj mas\251 tygla - m1 [g] : " ;
              cin >> a ; // wczytaj wartoÂc danej o nazwie m1
              cout << " Podaj mas\251 tygla z nawa\276k\245 - m2 [g] : " ;
              cin >> b ; // wczytaj wartoÂc danej o nazwie m2
              cout << " Podaj mas\251 tygla z nawa\276k\245 po spaleniu - m3 [g] : " ;
              cin >> c ; // wczytaj wartoÂc danej o nazwie m3
              y = ((c-a)/(b-a))* 100;
              cout << " \n \227rednia zawarto\230ci popio\210u w badanym w\251glu : " ;
              cout << y << "%" << endl ;
              break;
          }
          case '2':
          {
            cout << "Podaj numer pomiaru: "; cin >> nr;
            cout<<"\n";

            cout <<"Nr. "<<nr<<" m1= "<<a<<" m2= "<<b<<" m3= "<<c<<endl;
            st1="Nr."+nr+" m1= "+a+" m2= "+b+" m3= "+c;

            ofstream ofile("test.txt");
            for(int i=0;i<v_s.size();i++)
            ofile <<v_s[i]<<"\n";
            ofile<<st1<<"\n";
            v_s.push_back(st1);
            ofile.close();
            break;
          }
          case '3':
          {
            system("cls");
            ifstream ifile("test.txt"); //odczyt
            while(!ifile.eof())
            {
              getline(ifile,st);
              cout<<st<<endl;
            }
            ifile.close();
            break;
          }
          case '0':
          {
            exit(1);
          }
        }
      }
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    Pozdrawiam
  • Level 16  
    Napisa│eÂ, skompilowa│eÂ, nie uda│o siŕ i za│o┐y│e ten temat? Mo┐e najpierw popraw podstawowe b│ŕdy, jakie pokazuje kompilator.
    Co to jest?
    Code:
    y = ((c-a)/(b-a))* 100;

    Przecie┐ zmienne y,a,b,c to tekst.
    Ile jest ma│pa-banan+2*jab│ko?

    Edit: Napraw powy┐szy b│▒d, popraw w kilku linijkach nazwŕ zmiennej z st na st1 i powinno co ruszyŠ, przynajmniej siŕ skompilowaŠ.
  • Level 30  
    ten programik zapisuje do pliku :)

    Quote:
    #pragma argsused
    #include<stdio.h>
    #include<conio.h>
    #include<alloc.h>
    #include<WINDOWS.h>
    struct mp3
    {
    BYTE TAG[3];
    BYTE title[30];
    BYTE artist[30];
    BYTE album[30];
    BYTE year[4];
    BYTE comment[29];
    BYTE trackno[1];
    BYTE genre[1];
    };

    int main()
    {

    struct mp3 z;
    FILE *plik;


    plik=fopen("sciezka dostepu","rb");
    fseek(plik,-128,SEEK_END);
    fread(&z,sizeof(struct mp3),1,plik);

    printf("\n");
    printf("%3s\n",z.TAG);
    printf("%s\n",z.title);
    printf("%s\n",z.artist);
    printf("%s\n",z.album);
    printf("%s\n",z.year);
    printf("%s\n",z.comment);
    printf("%i\n",z.trackno);
    printf("%i\n",z.genre);
    fclose(plik);
    printf("\n");
    printf("Podaj tytul: ");
    scanf("%s",&z.title);
    plik=fopen("sciezka dostepu\\","wb");
    fwrite(&z,sizeof(struct mp3),1,plik);




    getch();
    return 0;
    }
  • Level 34  
    Straszliwie namiesza│e w tym programie. Po pierwsze je┐eli piszesz:
    using namesp...... to u┐ywaj▒c Dev-C++ nag│ˇwek powinien wyg│▒daŠ:
    #include "c:\dev-cpp\include\c++\cstdlib"
    #include <fstream>
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <vector>
    Bo kompilator zg│osi niepotrzebne uwagi.
    Na pocz▒tku deklarujesz
    string nr, st1,a ,b, c, y;
    potem pod te zmienne wczytujesz:
    cout << " \n Podaj mas\251 tygla - m1 [g] : " ;
    cin >> a ; // wczytaj wartoÂc danej o nazwie m1
    cout << " Podaj mas\251 tygla z nawa\276k\245 - m2 [g] : " ;
    cin >> b ; // wczytaj wartoÂc danej o nazwie m2
    cout << " Podaj mas\251 tygla z nawa\276k\245 po spaleniu - m3 [g] : " ;
    cin >> c ; // wczytaj wartoÂc danej o nazwie m3
    y = ((c-a)/(b-a))* 100;

    i prˇbˇjesz obliczyŠ wartoŠ y ktˇra jest stringiem. Rzecz niemo┐liwa.
    Stwˇrz nowe zmienne np
    float m1,m2,m3,yy; cin>>m1; itd
    Dalej nie patrzy│em,ale po co tworzysz <vector>?
    Popraw pocz▒tek prog. bez zapisywania do pliku,czyli opuŠ od ifstream do while(1)
    potem w case te┐ nie otwieraj plikˇw. Program musi siŕ skompilowaŠ. Przedstaw to co napisa│eÂ.

    Podaj co chcesz uzyskaŠ. Dorobi siŕ resztŕ.
  • Helpful post
    Level 16  
    Nie weim co chcia│e osi▒gn▒Š, ale je┐eli dobrze zrozumia│em to zrobi│bym to tak:
    Code:
    #include <cstdlib> 
    
    #include <fstream>
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <vector>

    using namespace std;

    struct Pomiar
    {
       Pomiar(int pnumer,double pm1,double pm2,double pm3)
       {
          numer=pnumer;
          m1=pm1;
          m2=pm2;
          m3=pm3;
       }
       int numer;
       double m1,m2,m3;
    };

    int main(int argc, char *argv[])
    {
       vector<Pomiar>v_s;
       string nr, st1;//a ,b, c, y;
       double a,b,c,y;

       char wybor;
       cout << "╔════════════════════════════════════════════════════════»" << endl ;
       cout << "║ Obliczanie \230redniej zawarto\230ci popio\210u w badanym w\251glu ║" << endl ;
       cout << "║                                                        ║" << endl ;
       cout << "║                          m3 - m1                       ║" << endl ;
       cout << "║                  alfa = ───────── * 100%               ║" << endl ;
       cout << "║                          m2 - m1                       ║" << endl ;
       cout << "╚════════════════════════════════════════════════════════ą" << endl ;
       while(1)
       {
          cout <<"\n Wybierz odpowiedni\245 opcj\251:\n";
          cout <<" 1. Podaj dan\251.\n";
          cout <<" 2. Zapis danych.\n";
          cout <<" 3. Odczyt danych.\n";
          cout <<" 0. Wyj\230cie.\n";

          switch(getch())
          {
          case '1':
             {
                cout << " \n Podaj mas\251 tygla - m1 [g] : " ;
                cin >> a ; // wczytaj wartoÂc danej o nazwie m1
                cout << " Podaj mas\251 tygla z nawa\276k\245 - m2 [g] : " ;
                cin >> b ; // wczytaj wartoÂc danej o nazwie m2
                cout << " Podaj mas\251 tygla z nawa\276k\245 po spaleniu - m3 [g] : " ;
                cin >> c ; // wczytaj wartoÂc danej o nazwie m3
                y = ((c-a)/(b-a))* 100;
                cout << " \n \227rednia zawarto\230ci popio\210u w badanym w\251glu : " ;
                cout << y << "%" << endl;
                v_s.push_back(Pomiar(v_s.size()+1,a,b,c));
                break;
             }
          case '2':
             {
                ofstream ofile("test.txt");
                for(int i=0;i<v_s.size();i++)
                {
                   ofile << "Nr." << v_s[i].numer << " m1=" << v_s[i].m1 << " m2="
                      << v_s[i].m2 << " m3=" << v_s[i].m3;
                   ofile << endl;
                }
                ofile.close();
                cout << "Gotowe" << endl;
                break;
             }
          case '3':
             {
                system("cls");
                ifstream ifile("test.txt");
                while(!ifile.eof())
                {
                   getline(ifile,st1);
                   cout<<st1<<endl;
                }
                ifile.close();
                break;
             }
          case '0':
             {
                exit(1);
             }
          }
       }
       system("PAUSE");
       return EXIT_SUCCESS;
    }
  • Level 25  
    Troszkŕ namiesza│em :| Z tymi zmiennymi to a┐ mi wstyd :( prˇbowa│em wszystkich mo┐liwoÂci :| Jestem pocz▒tkuj▒cy jeszcze muszŕ wiele nadrobiŠ. G│ˇwne za│o┐enia tego programu to obliczenie wartoÂci y oraz zapisaniu do pliku wartoÂci m1, m2, m3 i y.

    Dodano po 2 [godziny] 15 [minuty]:

    Dziŕki Faust o to mi chodzi│o, zapomnia│em, ┐e mo┐na do tego celu wykorzystaŠ rekordy :|. Mam do Ciebie pytanie bo dane s▒ nadpisywane czyli po ponownym uruchomieniu zostaj▒ wpisywane wyniki od pozycji nr.1 jak zrobiŠ by wyniki nie zosta│y skasowane lecz dopisywane do poprzednich?
  • Level 16  
    Ja bym to zrobi│ tak, tylko teraz, je┐eli w ci▒gu jednego uruchomienia programu bŕdziesz zapisywa│ plik kilka razy to niektˇre pomiary bŕd▒ dublowane. Wiŕc to trzeba tak, uruchamiasz program, wpisujesz dane, zapisujesz na dysk, wy│▒czasz program.
    Code:
    #include <cstdlib> 
    
    #include <fstream>
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <vector>

    using namespace std;

    struct Pomiar
    {
       Pomiar(double pm1,double pm2,double pm3)
       {
          m1=pm1;
          m2=pm2;
          m3=pm3;
       }
       double m1,m2,m3;
    };

    int main(int argc, char *argv[])
    {
       vector<Pomiar>v_s;
       string nr, st1;//a ,b, c, y;
       double a,b,c,y;

       char wybor;
       cout << "╔════════════════════════════════════════════════════════»" << endl ;
       cout << "║ Obliczanie \230redniej zawarto\230ci popio\210u w badanym w\251glu ║" << endl ;
       cout << "║                                                        ║" << endl ;
       cout << "║                          m3 - m1                       ║" << endl ;
       cout << "║                  alfa = ───────── * 100%               ║" << endl ;
       cout << "║                          m2 - m1                       ║" << endl ;
       cout << "╚════════════════════════════════════════════════════════ą" << endl ;
       while(1)
       {
          cout <<"\n Wybierz odpowiedni\245 opcj\251:\n";
          cout <<" 1. Podaj dan\251.\n";
          cout <<" 2. Zapis danych.\n";
          cout <<" 3. Odczyt danych.\n";
          cout <<" 0. Wyj\230cie.\n";

          switch(getch())
          {
          case '1':
             {
                cout << " \n Podaj mas\251 tygla - m1 [g] : " ;
                cin >> a ; // wczytaj wartoÂc danej o nazwie m1
                cout << " Podaj mas\251 tygla z nawa\276k\245 - m2 [g] : " ;
                cin >> b ; // wczytaj wartoÂc danej o nazwie m2
                cout << " Podaj mas\251 tygla z nawa\276k\245 po spaleniu - m3 [g] : " ;
                cin >> c ; // wczytaj wartoÂc danej o nazwie m3
                y = ((c-a)/(b-a))* 100;
                cout << " \n \227rednia zawarto\230ci popio\210u w badanym w\251glu : " ;
                cout << y << "%" << endl;
                v_s.push_back(Pomiar(a,b,c));
                break;
             }
          case '2':
             {
                int IloscPomiarow=0;
                ifstream ifile("test.txt");
                if(!ifile.is_open())
                   IloscPomiarow=0;
                else
                {
                   while(!ifile.eof())
                   {
                      getline(ifile,st1);
                      IloscPomiarow++;
                   }
                   ifile.close();
                   IloscPomiarow--;
                }         
                ofstream ofile("test.txt",ios::app);
                for(int i=0;i<v_s.size();i++)
                {
                   ofile << "Nr." << ++IloscPomiarow << " m1=" << v_s[i].m1 << " m2="
                      << v_s[i].m2 << " m3=" << v_s[i].m3;
                   ofile << endl;
                }
                ofile.close();
                cout << "Gotowe" << endl;
                break;
             }
          case '3':
             {
                system("cls");
                ifstream ifile("test.txt");
                while(!ifile.eof())
                {
                   getline(ifile,st1);
                   cout<<st1<<endl;
                }
                ifile.close();
                break;
             }
          case '0':
             {
                exit(1);
             }
          }
       }
       system("PAUSE");
       return EXIT_SUCCESS;
    }
  • Level 25  
    Same wartoÂci m1, m2, m3 bŕd▒ zawsze rˇ┐ne, sprawdzi│em program i dzia│a poprawnie :)

    Pozdrawiam
  • Level 34  
    Nie trzeba stosowaŠ kontenera <vector> i struktury. Mo┐na po│▒czyŠ wprowadzanie danych z zapisŕm do pliku. Mo┐na wprowadziŠ zabezpieczenie przed prˇb▒ otwarcia nieistniej▒cego pliku. Tak przedtem napisa│em bo chcia│em aby z niewielk▒ pomoc▒ sam do tego doszed│. Teraz za│▒czam kompletny prog.

    #include <fstream>
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <vector>
    using namespace std;

    int main(int argc, char *argv[])
    {
    string nr, st1;
    double y,m1,m2,m3;
    int IloscPomiarow;

    char wybor;
    cout << "╔════════════════════════════════════════════════════════»" << endl ;
    cout << "║ Obliczanie \230redniej zawarto\230ci popio\210u w badanym w\251glu ║" << endl ;
    cout << "║ ║" << endl ;
    cout << "║ m3 - m1 ║" << endl ;
    cout << "║ alfa = ───────── * 100% ║" << endl ;
    cout << "║ m2 - m1 ║" << endl ;
    cout << "╚════════════════════════════════════════════════════════ą" << endl ;
    while(1)
    {
    cout <<"\n Wybierz odpowiedni\245 opcj\251:\n";
    cout <<" 1. Podaj dan\251.\n";
    cout <<" 2. Odczyt danych.\n";
    cout <<" 0. Wyj\230cie.\n";

    switch(getch())
    {
    case '1':
    {
    cout << " \n Podaj mas\251 tygla - m1 [g] : " ;
    cin >> m1 ; // wczytaj wartoÂc danej o nazwie m1
    cout << " Podaj mas\251 tygla z nawa\276k\245 - m2 [g] : " ;
    cin >> m2 ; // wczytaj wartoÂc danej o nazwie m2
    cout << " Podaj mas\251 tygla z nawa\276k\245 po spaleniu - m3 [g] : " ;
    cin >> m3 ; // wczytaj wartoÂc danej o nazwie m3
    y = ((m3-m1)/(m2-m1))* 100;
    cout << " \n \227rednia zawarto\230ci popio\210u w badanym w\251glu : " ;
    cout << y << "%" << endl;

    IloscPomiarow=0;
    ifstream ifile("test.txt");
    if(!ifile.is_open())
    { IloscPomiarow=0;
    cout<<"jeszcze nie ma ┐adnego wpisu"<<endl;
    }
    else
    {
    while(!ifile.eof())
    {
    getline(ifile,st1);
    IloscPomiarow++;
    }
    ifile.close();
    IloscPomiarow--;
    } ifile.close();
    ofstream ofile("test.txt",ios::app);
    ofile << "Nr." << ++IloscPomiarow << " m1=" <<m1 << " m2="
    << m2 << " m3=" << m3<<" zaw. pop.= "<<y;
    ofile << endl;
    ofile.close();

    break;
    }

    case '2':
    {
    system("cls");
    ifstream ifile("test.txt");
    if(!ifile.is_open())
    { IloscPomiarow=0;
    ofstream ofile("test.txt",ios::app);
    ofile<<"poczatek pliku"<<endl;
    ifile.close();
    cout<<"jeszcze nie ma zadnego wpisu,musisz wpisac"<<endl;
    system("pause");exit(0);
    }
    while(!ifile.eof())
    {
    getline(ifile,st1);
    cout<<st1<<endl;
    }
    ifile.close();
    break;
    }
    case '0':
    {
    exit(0);
    }
    }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
    }