Diskuze: Plnění trojrozměrného pole ze souboru v céčku

C++ C a C++ Plnění trojrozměrného pole ze souboru v céčku

Avatar
krajda211
Člen
Avatar
krajda211:

Zdravím,
už nějakou dobu si lámu hlavu chybou, co jsem napsal. Vzhledem k tomu, že jsem na nic nebyl schopný přijít, obracím se na fórum.

Pro zasvěcení, mým úkolem bylo vytvořit program, který by sloužil jako test ze slovíček z jazyků. Měl by fungovat tak, že uživateli by se zobrazilo slovo a on by ho zkusil napsat v druhém, už určeném jazyce. Pak by se na konci programu vytvořilo zhodnocení a tak... Bohužel jsem udělal chybu, kterou, jak už jsem zmínil, nejsem schopný vyřešit.

Tam to :), co pro teď mám, funguje na tom způsobu, že ve stejném adresáři otevře soubor vocabulary.txt, kde na prvním řádku je počet pojmů a na dalších jsou slovíčka v prvním a druhém jazyce, např.:

3
auto
car
hodiny
clock
postel
bed

Můj zdroják zatím vypadá takto:

#include <stdio.h>
#include <stdlib.h>
#define LENGTH 32

void vypis(char ***, int);

int main() {
    char ***array;
    char buffer[LENGTH];
    int count;
    FILE *vocabularies;

    if ((vocabularies = fopen("vocabulary.txt", "rt")) == NULL) {
        return 0;
    }
    fscanf(vocabularies, "%i", &count);

    // Alokalizace
    array = (char ***) malloc(sizeof(char **) * count);
    for (int x = 0; x < count; x++) {
        array[x] = (char **) malloc(sizeof(char *) * 2);
    }
    for (int x = 0; x < count; x++) {
        for (int y = 0; y < 2; y++) {
            array[x][y] = (char *) malloc(sizeof(char) * LENGTH);
        }
    }

    // Načtení do pole
    for (int x = 0; x < count; x++) {
        for (int y = 0; y < 2; y++) {
        fscanf(vocabularies, "%s", buffer);
        array[x][y] = buffer;
        vypis(array, count);
        }
    }

    system("pause");
    return 0;
}

void vypis(char ***pole, int count) {
    for (int x = 0; x < count; x++) {
        for (int y = 0; y < 2; y++) {
            printf("%s ", pole[x][y]);
        }
        printf("\n");
    }
    printf("--------------\n");
}

Při provedení posledního cyklu bych čekal že pole bude vypadat asi takto:
auto car
hodiny clock
postel bed

Ono ale je celé pole zaplněné vždy posledním slovíčkem. Pole se plní úplně jinak než bych čekal, jde to taky vidět na výstupu na obrázku. Prosím tedy o jakoukoli pomoc nebo i kritiku ohledně zdrojáku.

 
Odpovědět 24.6.2015 15:54
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na krajda211
tomisoka:

Problém je v tomto:

array[x][y] = buffer;

Všechny "array[x][y]" nastavuješ, že budou odkazovat na tento "buffer".

Můžeš:
1) zkopírovat obsah "buffer" do již předem alokovaného pole v "array[x][y]"
2) vždy znovu alokovat "buffer", načíst do něj informace ze souboru a pak ho přiřadit k "array[x][y]"

Editováno 24.6.2015 16:35
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 24.6.2015 16:34
Avatar
krajda211
Člen
Avatar
Odpovídá na tomisoka
krajda211:

Už jdu na to, díky za řešení.

 
Nahoru Odpovědět 24.6.2015 16:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.