[ Damdoo @ 18.10.2004. 14:53 ] @
Pozdrav svima!

Evo jedno pocetnicko pitanje.
Imam slijedeci problem...treba da iz odredjenog file-a u c++ program ucitam brojke/znakove koji su u slijedecem formatu:
file.txt
**************
3
x y s
z v m
r t k
**************
-izmedju su "space-ovi".
3 oznacava broj linija u fajlu (treba mi za petlju u programu). Sada, treba da varijable (iz file-a) ucitam u program (ma koliko ih god bilo, zavisi od linija u fileu). Prva dva znaka u redu su double a treci je char.

Ovdje je problem: ucitam ja varijable iz prve linije(x y s) uspjesno, ali kako ostale? Kako skocim na drugi(treci...) red?
[ markom @ 18.10.2004. 15:00 ] @
Code:
while (!feof(f) { fgets...
[ zvrba @ 19.10.2004. 07:49 ] @
Evo ti rjesenje sa C stdio.. moze se i sa C++ streamovima, al tu nisam tolko dobar..

Code:

#include <stdio.h>

void read_file(FILE *f)
{
  char buf[512];  // ovo bi trebalo bit dovoljno za 2 double i char
  double x, y;
  char ch;
  unsigned int n;

  fgets(buf, sizeof(buf), f);
  sscanf("%u", &n);
  while(n--) {
    if(!fgets(buf, sizeof(buf), f)) {
      // GRESKA: u fajlu ima manje redaka nego sto je napisano
    }
    if(sscanf("%lf %lf %c", &x, &y, &ch) != 3) {
      // GRESKA u ulaznom formatu..
    }
    // x, y i ch su podaci iz retka u fajlu
  }
}
[ ivbrcic @ 03.11.2004. 10:42 ] @
Evo rjesenja.
Iako mislim da ti je prvi broj nepotreban.

#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

struct FileData {
double f1;
double f2;
char c;
};

// ovo je operator>> koji nam sluzi za unos
std::istream& operator>>(std::istream& is, FileData &fd)
{
is >> fd.f1 >> fd.f2 >> fd.c;
return is;
}

// ovaj operator ti ne treba, on sluzi samo da bi vidio
// da li je sve OK uneseno
std::ostream& operator<<(std::ostream& os, const FileData &fd)
{
os << fd.f1 << ' ' << fd.f2 << ' ' << fd.c;
return os;
}

int main ()
{
int n;
std::ifstream ifstr("file.txt");
std::vector<FileData> v;

ifstr >> n;

while (n--)
{
FileData fd;
ifstr >> fd;

// ovo nam sluzi da unesemo stvarni broj redaka
if (ifstr.fail()) {
std::cout << "Some Error code!" << std::endl;
break;
}
v.push_back(fd);
}

//ispisujemo samo ucitane podatke
std::ostream_iterator<FileData> ispis(std::cout, "\n");
std::copy(v.begin(), v.end(), ispis);
}

To je to valjda ces shvatiti. Ako si pocetnik, malo teze ces shvatiti zadnje dvije linije, ali sa vremenom...