Mam kłopot z zadaniem z Programowania. Mam zaproponować strukturę programu, który wczyta dane z pliku.txt zawierającego kilka wierszy tylko i wyłącznie liczb rzeczywistych.
Czy mógłby ktoś mi wyjaśnić w jaki sposób to zrobić.
Co zrobiłaś do tej pory?
Jedyne co wiem to to że za pomocą ifstream ifile("dane.txt"); można wczytać dane z pliku a dalej czarna dziura
Otwórz plik ,użyj fseek , ustaw wskaźnik na końcu , ftell poda Ci ilość bajtów pod to za alokuj tablice , wczytaj tam swój plik . Za alokuj drugą tablice o identycznym rozmiarze co ta pierwsza . Przeszukuj w forze znaków '0'<= && <='9' lub czy wczytany znak =='.' || czy =='-' ,zapisuj znalezione znaki do tej drugiej tablicy dopóki warunek jest spełniony,inkrementując przy tym jej indeks . Kiedy warunek nie będzie spełniony wywołaj funkcje
double konwerjsa(char *tablica_druga) wewnątrz niej użyj funkcji strtod i zwróć tą wartość najlepiej do jakiejś tablicy bo jesteś nadal w pętli for potem usuń tablice drugą i utwórz ją na nowo i ustaw indeks na zero . Musisz zrobić warunek na dodanie '.' do drugiej tablicy bo może się zdarzyć że w txt bęndzie stać jedna koło drugiej , to samo się tyczy '-' i pamiętaj że '-'nie może być w środku tylko na początku czyli musi mieć indeks 0 i że '.' może być tylko jedna w drugiej tablicy więc zrób jakąś zmienną do sprawdzania liczby '.' które już są w tablicy drugiej .
- otwórz plik
- (pętla) dopóki z pliku udaje się wczytać liczbę dodaj ją do zbioru danych
Jak słusznie zauważyłaś ifstream
służy do czytania plików
Do wczytania wartości z pliku do zmiennej użyj operatora >>
np.
ifile >> variable;
To, czy wcztanie się powiodło sprawdzisz instrukcją if
w ten sposób:
if (ifile)
można to sprawdzać "od razu" podczas próby wczytania wartości z pliku do zmiennej:
if (ifile >> variable)
Jako, że operacja będzie powtarzana możesz ten warunek umieścić w instrukcji while
(pętla) zamiast instrukcji if
Jako zbiór danych użyj kontenera np. vector<double>
, dane do takiego kontenera dodaje się metodą o nazwie push_back
.
vector<double> data;
data.push_back(variable);
http://cpp0x.pl/kursy/Kurs-C++/Obsluga-plikow/305
Wczytujesz linijkę getline do sring'a np x, i zamieniasz na float tak:
float y = atof(x.c_str());