Odpowiedz na ten temat
Pokaż wyniki od 1 do 9 z 9

  1. Dołączył
    May 2007
    Skąd
    Białogard
    Postów
    297

    Cytuj | #1

    chcę napisać funkcję w C zbiżonej do poniższej napisanej w Objective-C :
    Kod:
    -(NSArray *)readFromFile:(NSString *)name
    {
    	NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"txt"];
    	NSString *entireFileInString = [NSString stringWithContentsOfFile:path]; 
    	NSArray *lines = [entireFileInString componentsSeparatedByString:@"\n"];
    	return lines;
    }
    funkcja ma odczytywać plik i zapisywać w postaci char* wybraną linie tekstu język C jest konieczny ze względu na późniejsze portowanie na inne systemy.
    Kod:
    char* readFile (int nrLine,char * NameFile) {
        char* line; 
        int c;
         FILE* fin;
        fin=fopen(NameFile,"rb");
        while(1)
        {
            c=fgetc(fin);
            if(!feof(fin))   line =+ c;  ///??? how shoud be that??? 
            //how seperate lines??
            //how find the Line??
        }
        fclose(fin);
          
    return line;
    }
    jeśli ma ktoś pomysł jak można zrobić tablicę dwuwymiarową to tym bardziej będę zadowony
    ;/ nestety coś ciężko mi idą niektóre zagadnienia w C
    Komputer: Macbook 13" 2,1 ghz X3100 snow leopard
    Odtwarzacz: iPod Classic


  2. Avatar Krzema
    Dołączył
    Jul 2008
    Skąd
    Gdańsk, PL
    Postów
    181

    Cytuj | #2

    W językach trochę wyższego poziomu, np. w C++, istnieją klasy typu vector, co można rozumieć jako dynamicznie rozszerzalną tablicę. Mógłbyś odczytywać plik linia po linii i od razu dodawać odczytaną linię do tej tablicy. W C zrobiłbym mniej więcej tak: na początku policzyłbym w pliku ilość znaków nowej linii. Jeżeli tych znaków jest N, ilość linii będzie wynosiła N+1. Teraz trzeba się zastanowić czy długość pojedynczej linii jest w miarę przewidywalna, czyli że nie przekracza np. 100 znaków. Jeżeli tak, można być leniwym i dla każdej linii przeznaczyć tablicę o takim właśnie rozmiarze. Jeżeli nie, musiałbyś sprawdzać długość każdej linii z osobna i alokować odpowiedniej wielkości tablice.

    Jak zaalokować tablicę dwuwymiarową? Tak się alokuje tablicę jednowymiarową:
    Kod:
    char *tablica;
    tablica = (char*)malloc(dlugoscLinijki*sizeof(char));
    W przypadku tablicy 2D musisz zaalokować tablicę wskaźników do typu char ("tablicę tablic"), czyli robisz mniej więcej tak:
    Kod:
    char **plik;
    plik = (char**)malloc(iloscLinijek*sizeof(char*));
    i teraz dla każdej komórki alokujesz tablicę jednowymiarową, tak jak napisałem wcześniej. Pamiętaj by tablice dla pojedynczej linii była o 1 większa niż ilość znaków w tej linii - musi być miejsce na bajt zerowy (znak NULL, '\0').


  3. Dołączył
    May 2007
    Skąd
    Białogard
    Postów
    297

    Cytuj | #3

    Dzięki bardzo przydały się te wskazówki
    Komputer: Macbook 13" 2,1 ghz X3100 snow leopard
    Odtwarzacz: iPod Classic


  4. Dołączył
    Aug 2008
    Skąd
    Poznań
    Postów
    161

    Cytuj | #4

    To ja się może przy okazji dopytam o wskaźniki.
    jeżeli jest taki zapis jak w poprzednim poscie

    Kod:
    char *tablica;
    tablica = (char*) malloc itp...
    i z kolei w "Lean Objective-C on Mac" mam np:
    Kod:
    @implementation Engine
    - (NSString *) description {
    return (@"I am an engine. Vrooom!"); } // description
    @end // Engine
    
    @interface Car : NSObject {
    Engine *engine; Tire *tires[4];
    } - (void) print; @end // Car
    No i moje pytanie brzmi. Czemu raz gwiazdka wskaźnika jest przy zmiennej np *engine a czasami jest przy typie i do tego w nawiasie ,
    Komputer: MBP 13 2,56 4GB RAM Late 2009
    Telefon: iphone 3GS 4.3
    Odtwarzacz: w telefonie
    JB jest jak wiejski tuning. Poprawiać dobre?

  5. Avatar piotrpsz
    Dołączył
    Feb 2011
    Skąd
    Poznań, PL
    Postów
    17

    Cytuj | #5

    Cytat Napisał Beyo Zobacz post
    No i moje pytanie brzmi. Czemu raz gwiazdka wskaźnika jest przy zmiennej np *engine a czasami jest przy typie i do tego w nawiasie
    Typy w nawiasach stosuje się w dwóch przypadkach:
    1. określenie typu (zwracanego, lub parametrów) w nagłówkach funkcji,
    2. tzw. casting, czyli konwersja typu z innego.

    W pozostałych sytuacjach 'char* buffer' i 'char *buffer' to to samo, co stosujesz zależy co Ci się bardziej podoba.
    Komputer: iMac, MacBook Pro
    Telefon: iPhone 3GS


  6. Dołączył
    Aug 2008
    Skąd
    Poznań
    Postów
    161

    Cytuj | #6

    Czyli jak mam (NSString *) costam to costam jest nazwą metody operującej na klasie i w wyniku jej działania dostajemy...hm...no wlasnie co..wskaźnik na string?
    Komputer: MBP 13 2,56 4GB RAM Late 2009
    Telefon: iphone 3GS 4.3
    Odtwarzacz: w telefonie
    JB jest jak wiejski tuning. Poprawiać dobre?

  7. Avatar piotrpsz
    Dołączył
    Feb 2011
    Skąd
    Poznań, PL
    Postów
    17

    Cytuj | #7

    1) jeśli masz funkcję: -(NString *)NazwaJakiesFunkcji to funkcja zwraca wskaźnik do klasy NSString,
    2) jeśli ptr = (char*)malloc, oznacza konwersje z typu 'void *' do typu 'char *'
    Komputer: iMac, MacBook Pro
    Telefon: iPhone 3GS


  8. Dołączył
    Aug 2008
    Skąd
    Poznań
    Postów
    161

    Cytuj | #8

    A tzn że jakbym chciał by mi funkcja zwracała tablice dwuwymiarową to taki zapis jest uprawniony - (NSString **) Nazwajakiejsfunkcji.
    Sorki ze tak pytam ale wskazniki to cos co słabo ogarniam niby powinno być tak jak w C ale to w końcu Objective więc może przy obiektach jest inaczej.
    Komputer: MBP 13 2,56 4GB RAM Late 2009
    Telefon: iphone 3GS 4.3
    Odtwarzacz: w telefonie
    JB jest jak wiejski tuning. Poprawiać dobre?

  9. Avatar Roberto
    Dołączył
    Feb 2007
    Skąd
    Wrocław
    Postów
    11,866

    Cytuj | #9

    nie jest inaczej.
    inaczej jest tylko ze zmienną typu id, która sama w sobie jest wskaźnikiem.
    Komputer: MacBook Pro 13,3" 2,26GHz (Lion 10.7.3)
    Telefon: iPhone 4S
    Tablet: iPad 2 3G
    dlaczego nie korzystasz z opcji szukaj?
    http://ifiboughtyourappalreadycaniup...acappstore.com

Odpowiedz na ten temat