Odczyt danych z pliku txt do tablic
Ostatnio zmodyfikowano 2020-04-11 11:55
Shana_a Temat założony przez niniejszego użytkownika |
Odczyt danych z pliku txt do tablic » 2020-04-09 14:35:48 Chciałabym wczytać dane z tego typu pliku i wstawić liczby do tablic.
A 4 23 54 64 65 76 B 3 45 45 23 34 34
Próbowałam zrobić to tak, aby pierwszy wyraz odczytało jako literę, a potem jako liczby i wstawiło je do tablic. Jednak nie do końca wiem jak to zrobić poprawnie z użyciem pętli. |
|
pekfos |
» 2020-04-09 15:59:12 pierwszy wyraz odczytało jako literę, a potem jako liczby i wstawiło je do tablic. |
I tak w pętli, dopóki możesz wczytywać liczby. Gdy spróbujesz wczytać "B" jako liczbę pojawi się błąd. Wtedy możesz zresetować flagę błędu i zacząć od nowa. Coś takiego będzie działać poprawnie, dopóki w pierwszej kolumnie w pliku nie będziesz mieć czegoś, co zaczyna się od poprawnej liczby. Jeśli nie możesz tak założyć, to możesz np wykorzystywać przejścia do nowych linii jako separatory. Patrz "trudne zadanie" w Wczytywanie zawartości pliku, a kontrola błędów. Chyba że, jak w twoim przykładzie, liczb jest zawsze 6 - wtedy nie wiem jaki tu masz problem. |
|
Shana_a Temat założony przez niniejszego użytkownika |
» 2020-04-09 22:03:49 Patrzyłam już wcześniej na ten plik, ale nie jestem pewna, gdzie powinnam "wcisnąć" moją tablice. W tym wypadku cały czas pokazuje mi ostatnią cyfrę i nie wiem do końca dlaczego. #include <iostream> #include <fstream> #include <string>
using namespace std; int tablica[ 5 ]; bool odczytajPlik( std::string sNazwaPliku ) { std::ifstream plik; plik.open( sNazwaPliku.c_str() ); if( !plik.good() ) { std::cout << "Nie udalo sie otworzyc pliku." << std::endl; return false; } while( true ) { int iLiczba; char cZnak; plik >> iLiczba; if( !plik.fail() ) for( int i = 0; i < 6; i++ ) { tablica[ i ] = iLiczba; } else { if( plik.bad() ) return false; plik.clear(); plik >> cZnak; if( !plik.fail() ) std::cout << "Znak = '" << cZnak << "'" << std::endl; else { if( plik.eof() ) break; return false; } } } for( int i = 0; i < 6; i++ ) { cout << tablica[ i ] << endl; } std::cout << "Koniec pliku" << std::endl; return true; } using namespace std;
int main() { if( odczytajPlik( "dane.txt" ) ) std::cout << "Plik zostal poprawnie wczytany!" << std::endl; return 0; }
|
|
pekfos |
» 2020-04-10 13:20:51 for( int i = 0; i < 6; i++ ) { tablica[ i ] = iLiczba; } |
To robi dokładnie to, co jest napisane w kodzie. Czyli wypełnia całą tablicę tą samą wartością. |
|
nanoant20 |
» 2020-04-10 22:57:27 na ZEUSA, 12 liczb, chcesz upakować do tablicy 6 elementowej ten fragment kodu naprowadzi Cię, co się dzieje, sprawdź czy potrzebna jest ta pętla for int licznik { 0 }; while( true ) { int iLiczba { 0 }; char cZnak; plik >> iLiczba; if( !plik.fail() ) { for( int i = 0; i < 11; i++ ) { tablica[ licznik ] = iLiczba; cout << "i := " << i << " tablica[" << licznik << "] - " << iLiczba << endl; licznik++; break; }
|
|
Shana_a Temat założony przez niniejszego użytkownika |
» 2020-04-11 11:55:51 "na ZEUSA, 12 liczb, chcesz upakować do tablicy 6 elementowej"
Przepraszam, wstawiłam inny kod, próbowałam robić na innym pliku z mniejszą ilością danych.
Dziękuję nanoant20, Twój kod zdecydowanie mi pomógł zrozumieć tablicę. Dziękuję za pomoc. |
|
« 1 » |