[C++] Pobieranie danych liczbowych z pliku

0

Mam problem z napisaniem kawałka programu. Potrzebuję pobrać dane liczbowe z pliku i wsadzić je w tablice. Plik z danymi ma taką postać:

12.3456 12.3456
12.3456 12.3456
12.3456 12.3456
12.3456 12.3456
12.3456 12.3456
12.3456 12.3456

Chciałbym dane z pierwszej kolumny wlepić w pierwszą tablicę, dane z drugiej - w drugą. Kolumny są oddzielone od siebie spacją.

Szukałem rozwiązania w książkach i na forach, ale nic takiego nie znalazłem. Albo nikt czegoś takiego nie robił, albo jest to zbyt proste żeby o tym pisać, albo mam problemy z percepcją a rozwiązanie przed nosem.

Dopomoże ktoś?

0
/*----------------plik dane.txt
12.3451 12.3457 
12.3452 12.3458 
12.3453 12.3459 
12.3454 12.3460 
12.3455 12.3461 
12.3456 12.3462*/
#include <iostream.h>
#include <fstream.h>


//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char **argv)
{
   double kol_1[255];
   double kol_2[255];
   int ile_w_kol = 0 ;

   ifstream plik("dane.txt");

   if(!plik)
   {
         cout << "Error" << endl ;
         cin.get();
         return 0 ;
   }

   while( plik >> kol_1[ile_w_kol])
   {
        plik >> kol_2[ile_w_kol];
        ile_w_kol++ ;
   }

   //Kolumna 1

    for (int i = 0 ; i < ile_w_kol  ;i++)
    {
      cout << kol_1[i] << endl ;
    }

                cout << endl ;
   //Kolumna 2

    for (int i = 0 ; i < ile_w_kol  ;i++)
    {
       cout << kol_2[i] << endl ;
    }

        cin.get();
        return 0;
}
0
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
	ifstream plik;
	double tab1[6],tab2[6];
	plik.open("plik.txt");
	for(int i=0;i<6;i++)
	{
		plik >> tab1[i] >> tab2[i];
	}
	plik.close();
        //tu jeszcze wypisywanie
	for(int i=0;i<6;i++)
	{
		cout << fixed <<  tab1[i] << " " << tab2[i] << endl;
	}
	return 0;
} 

plik będzie wyglądał tak jak podałeś

edit: nie odświeżałem strony długo i widze że nie jestem pierwszy :P

0

O, o to właśnie mi chodziło. Zaczerpnę nieco z obu propozycji. Co prawda ilość linijek w plikach nie jest stała, ale z tym powinienem sobie poradzić.
Mam jeszcze 2 pytania:
1 - jak dokładnie działa ta linijka?

plik >> tab1[i] >> tab2[i];

Chodzi mi konkretnie o przeskoczenie spacji i zapisanie wartości za nią.

2 - czy "fixed" da się zmodyfikować tak, aby wyświetlał wartości do 6 miejsca zamiast 8? Kwestia czysto estetyczna.

0

Obiekt klasy ifstream wczytuje dane do białego znaku, tabulator enter spacja.

Nie ma znaczenia czy

1 2 3

1
2
3

Wczytujesz tak samo.

0
Esperal napisał(a)

2 - czy "fixed" da się zmodyfikować tak, aby wyświetlał wartości do 6 miejsca zamiast 8? Kwestia czysto estetyczna.

Tak, jest to możliwe piszesz:

#include <iomanip>
//  ...
cout << fixed << setprecision (ilosc_miejsc_po_przecinku) << zmiennoprzecinkowa;
//  ...
0
Esperal napisał(a)

1 - jak dokładnie działa ta linijka?

plik >> tab1[i] >> tab2[i];

Chodzi mi konkretnie o przeskoczenie spacji i zapisanie wartości za nią.

ifstream jest klasą pochodną od istream (cin), i wczytując (zamiast z klawiatury - z pliku) zachowuje się tak samo.

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