Getline, sczytywanie linijka po linijce z pliku

0

Witam mam o to taki kod(polecenie też tam jest)

/* 
1. Podajemy 2 liczby x, y. X ma być mniejsze od Y.
2. Odczytujemy z pliku liczby 5 liczb
3. zapisujemy wszystkie liczby z pliku do tablicy
4. sprawdzamy czy liczba z pliku jest większa od x i mniejsza od y (jeżeli tak
to wypisujemy na erkrn - ok jeśli nie to wypisujemy liczbe
( np. 5 - ok);

*/

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

main()
{
int x=1,y=0, i=0, tab[10];
cout << "Podaj y: ";
cin >> y;
cout << "Podaj x: ";
cin >> x;
while(x>y)
{    cout << "Podaj x, musi byc mniejsze od Y: ";
    cin >> x;
     cout << "\r";     
}
ifstream wczytywanie;
wczytywanie.open("liczby.txt");

for (i=0;i<5;i++)
{getline(wczytywanie,tab[i]);
    if (tab[i]>x && tab[i]<y)
    {
                 cout << tab[i] << " - ok \n";
    }
    else {
    cout << tab[i] << " - nie ok\n";}
}      

cout << "\n";
system("Pause");
}

Mam następujący bład:
no matching function for call to `getline(std::ifstream&, int&)' . Przez godzine googlowałem..nie czytając innych posty, próbując różnymi metodami nie potrafię zlikwidować błędu.
Czy ktoś mógłby mi dać wskazówki jak to dobrze rozpisać? Ewentualnie gdzie mogę znaleźć poradnik na temat operacji na plikach txt? W symfonii tego nie ma z tego co przejrzałem(aktualnie jestem na koło 300 str;P) W pascalu troche prościej to działa wszystko, ale w c++ chcę też umieć:)

pozdrawiam

0

Bo getline jak sama nazwa wskazuje wczytuje... LINIĘ (domyślnie jako koniec linii przyjmuje \n). A linia to zwykle string.

Jeśli chcesz wczytać pojedynczą liczbę, to użyj operatora >>: istream >> liczba;

0
  if ( (tab[i]>x) && (tab[i]<y) )

Nie powinno być tak?

0
Azrael_Valedhel napisał(a)

Bo getline jak sama nazwa wskazuje wczytuje... LINIĘ (domyślnie jako koniec linii przyjmuje \n). A linia to zwykle string.

Jeśli chcesz wczytać pojedynczą liczbę, to użyj operatora >>: istream >> liczba;

plik moj liczby.txt wygląda przykładowo tak:
12
311
123
142
142
142

i bierze 5 początkowych linijek. I chce zrobić że tab[0]= 12, tab[1]=311 itd. Nie wiem nawet jak zwiększać get? getline? żeby przeskakiwać linijki;/

0

Powinienem po prostu rzucić RTFM w tym momencie.
Ale masz: http://www.cplusplus.com/refe[...]tream/istream/operator%3E%3E/

vector<int> tab;
int tmp;
while (plik >> tmp) {
    tab.push_back(tmp);
}

Dla zwykłej tablicy będzie analogicznie, tylko z indeksem. Poradzisz sobie chyba.

0

Dobrnąłem.. jest gdzieś może taka dokumentacja po polsku(w pierwszych wynikach google nie znalazłem chyba, że złe słowa kluczowe)

Tak wygląda działający program:

/* 
1. Podajemy 2 liczby x, y. X ma być mniejsze od Y.
2. Odczytujemy z pliku liczby 5 liczb
3. zapisujemy wszystkie liczby z pliku do tablicy
4. sprawdzamy czy liczba z pliku jest większa od x i mniejsza od y (jeżeli tak
to wypisujemy na erkrn - ok jeśli nie to wypisujemy liczbe
( np. 5 - ok);

*/

#include <iostream>
#include <string>
#include <sstream>
#include <fstream>

using namespace std;

main()
{
string tab[10];

int x=1,y=0, i=0,a;
cout << "Podaj y: ";
cin >> y;
cout << "Podaj x: ";
cin >> x;

while(x>y)
{    cout << "Podaj x, musi byc mniejsze od Y: ";
    cin >> x;
     cout << "\r";     
}

ifstream wczytywanie("liczby.txt"); 

if (wczytywanie.is_open())
{
while (! wczytywanie.eof() )
{

getline (wczytywanie,tab[i]);

istringstream iss(tab[i]);
iss >> a;

i++;
    if ((a>x) && (a<y))
    {
                 cout << a << " - ok \n";
    } else {
    cout << a << " - nie ok\n";}

}
wczytywanie.close();
}

else cout << "Nie mozna otworzyc pliku"; 

cout << "\n";
system("Pause");
}

Dziękuje za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0