Wczytywanie z pliku. Jak zrobić, aby program czytał dalej daną linijke, a nie przechodził do nowej.
Ostatnio zmodyfikowano 2014-06-03 10:56
gustawson Temat założony przez niniejszego użytkownika |
Wczytywanie z pliku. Jak zrobić, aby program czytał dalej daną linijke, a nie przechodził do nowej. » 2014-06-03 10:30:58 Witam! Mam taki problem. Mianowicie mam plik wejściowy (link -> http://speedy.sh/eTHaY/piwko.txt) I kiedy korzystam ze struktur wczytuje się wszystko prawidłowo #include <iostream> #include <fstream> #include <string>
using namespace std;
struct SPiwo { unsigned wysokosc; double promien_podstawy; string marka; }; struct SKarton { SPiwo * piwa; unsigned ile_piw; int kod; };
SKarton wczytaj_piwa( ifstream & iplik, unsigned & rozmiar ) { if( iplik.good() ) { SKarton piweczka; iplik >> rozmiar; SPiwo * tab = new SPiwo[ rozmiar ]; piweczka.ile_piw = rozmiar; cout << "Ile_piw: " << rozmiar << endl; for( unsigned i = 0; i < rozmiar; i++ ) { iplik >> tab[ i ].wysokosc; cout << tab[ i ].wysokosc << " "; iplik >> tab[ i ].promien_podstawy; cout << tab[ i ].promien_podstawy << " "; iplik >> tab[ i ].marka; cout << tab[ i ].marka << " " << endl; } } else { cerr << "Blad pliku" << endl; } }
int main() { unsigned rozmiar; ifstream iplik; iplik.open( "piwko.txt", ios::in ); wczytaj_piwa( iplik, rozmiar ); iplik.close(); }
Wiem,że niektore zmienne są niepotrzebne, ale są zostawione na poczet dalszej walki z zadaniem. Wynik na coutach mam takich jak plik źródłowy. Natomiast kiedy nie chce korzystać ze struktur a na tablicach chce to niestety nie moge sobie poradzić bo cały czas powtarza początkowy wyraz z danej linijki O to moj kod #include <iostream> #include <fstream> #include <string>
using namespace std;
void wczytaj( ifstream & iplik, unsigned & rozmiar ) { if( iplik.good() ) { iplik >> rozmiar; cout << "Rozmiar " << rozmiar << endl; double * wysokosc = new double[ rozmiar ]; double * promien = new double[ rozmiar ]; string * marka = new string[ rozmiar ]; for( unsigned i = 0; i < rozmiar; i++ ) { iplik >> wysokosc[ i ]; cout << wysokosc[ i ] << " "; iplik >> promien[ i ]; cout << wysokosc[ i ] << " "; iplik >> marka[ i ]; cout << wysokosc[ i ] << endl; } } else { cerr << "Blad pliku" << endl; } }
int main() { ifstream iplik; unsigned rozmiar; iplik.open( "piwko.txt" ); wczytaj( iplik, rozmiar ); }
Moje pytanie do Was. Co zrobić, aby program po zobaczeniu tego białego znaku w tym przypadku spacji, przechodził dalej a nie powtarzał pierwszego wyrazu? |
|
00Andre |
» 2014-06-03 10:43:31 W petli for w funkcji void zapis przy wypisywaniu na ekran dawałeś tylko wysokość ! Twój kod: for( unsigned i = 0; i < rozmiar; i++ ) { iplik >> wysokosc[ i ]; cout << wysokosc[ i ] << " "; iplik >> promien[ i ]; cout << wysokosc[ i ] << " "; iplik >> marka[ i ]; cout << wysokosc[ i ] << endl; }
A mój poprawiony: for( unsigned i = 0; i < rozmiar; i++ ) { iplik >> wysokosc[ i ]; cout << wysokosc[ i ] << " "; iplik >> promien[ i ]; cout << promien[ i ] << " "; iplik >> marka[ i ]; cout << marka[ i ] << endl; }
Wynik programu twojego kodu: Rozmiar 3 20 20 20 22 22 22 21 21 21
Wynik programu mojego: Rozmiar 3 20 3.5 Klasyczne 22 3.0 Niepasteryzowane 21 3.65 Jasno-ciemne
00Andre |
|
gustawson Temat założony przez niniejszego użytkownika |
» 2014-06-03 10:50:33 Jaka głupota, aż wstyd się przyznać. Jednak to racja że kopiuj wklej to największy wróg osoby próbującej programowac :D dzięki za pomoc :) |
|
00Andre |
» 2014-06-03 10:56:09 Dokładnie, kopiowanie jest wygodne np. jak mam duży ko ale trzeba pamiętać, aby poprawić go przy każdym innym kopiowaniu ;) |
|
« 1 » |