Nowe posty

Autor Wątek: Wczytywanie danych z pliku do wektora  (Przeczytany 4006 razy)

kordi

  • Gość
Wczytywanie danych z pliku do wektora
« dnia: 2013-03-15, 23:35:40 »
Napisalam drobny rogramik, ktory wczytuje dane z pliku do wektora:

dane.txt
1 23 44 556
2 34 3
23 321 2 32
3 0 0 2 22
main.cpp
#include
#include
#include
#include

using namespace std;
int main()
{
    ifstream plik("dane.txt");
    if (! plik) cout<<"Brak pliku 'Data.txt' w katalogu z programem. Sproboj ponownie\\n";

    int s = 0;
    vector V_s;
    ifstream S("dane.txt");
    string l;
    while (getline(S, l)) V_s.push_back(l);
    for (int i = 0; i < V_s.size(); i++) s++;
    S.close();
//    V_s.clear();

    for (int i=0; i    {
      cout<<"V["<    }
}
W ten sposob otrzymuje:
V[0]=1 23 44 556
V[1]=2 34 3
V[2]=23 321 2 32
V[3]=3 0 0 2 22

Chcialabym zapytac w jaki sposob powinnam zrobic, aby kazdy element pliku dane.txt byl osobnym elementem wektora, tzn
V[0]=1
V[1]= 23
V[2] =44
V[3] = 556
V[4] = 2
itd.

Bede wdzieczna za jakiekolwiek wskazowki.


kordi

  • Gość
Wczytywanie danych z pliku do wektora
« Odpowiedź #2 dnia: 2013-03-17, 20:55:39 »
Wielkie dzieki.

Napisala dwie funkcje, jedna ktora wczytuje dane z pliku,a druga ktora je wyswietla:
#include 
#include
#include
#include
using namespace std;

void wczyt(const char *tekst,vector&wektor, int *s);
void wyswietl(vector&wektor,int *s);

int main()
{
        int s;
        vectorw;
        wczyt("dane.txt",w,&s);
        wyswietl(w,&s);
}

        void wczyt(const char *tekst,vector&dane,int *s)
        {
          ifstream plik(tekst);
          if(!plik)
          {
                cerr << "Brak pliku.";
          }
          string x;
          while(plik >> x)
                dane.push_back(x);
           s=dane.size();;
          plik.close();

        }

        void wyswietl(vector&dane, int*s)
        {
          for (int i=0; i          {
           cout<<"V["<          }
          cout<<"S="<       }
Jednakze po kompilacji wyskakuje mi blad:
wczyt_liczb_wekt.cpp: In function ‘void wczyt(const char*, std::vector >&, int*)’:
wczyt_liczb_wekt.cpp:33:14: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]

Czy zle wykorzystuje wskaznik do s?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3068
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Wczytywanie danych z pliku do wektora
« Odpowiedź #3 dnia: 2013-03-17, 22:22:15 »
Skup się na tym pseudo-fragmencie (funkcji wczyt)
int *s;
s=dane.size();
Jak nie ogarniasz wskaźników (a w nowym C++ mają status "discouraged"), to zacznij stosować referencje. W programowaniu niesystemowym referencje często dużo lepiej pasują niż wskaźniki.

Dodatkowo, dla początkującego w C/C++ lepszy od gcc/g++ jest duet clang/clang++, ze względu na to, że komunikaty błędów dą dużo bardziej użyteczne dla endusera:

$> clang++ test.cpp 
test.cpp:28:13: error: assigning to 'int *' from incompatible type 'size_type' (aka 'unsigned long')
           s=dane.size();;
            ^~~~~~~~~~~~
1 error generated.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

kordi

  • Gość
Wczytywanie danych z pliku do wektora
« Odpowiedź #4 dnia: 2013-03-17, 22:43:32 »
Zgadza sie, za pomoca referencji zadzialalo od razu. :) A czy moglabym liczyc na pokazanie jak to powinno byc zrobione za pomoca wskaznikow?
Zawsze bede wiedziec na przyszlosc.