NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Unda
Člen
Avatar
Unda:15.12.2017 12:22

Caute, nemohl by mi někdo poradit jak by kod měl vypadat? :)
Jde mi o načtení celého řádku do pole.

Zkoušel jsem i něco typu "fcanf(%s, pole[i])", ale jelikož je v souboru mezere tak se mi to cele neuloží do jedné proměné :/. Hodnoty poté hodlám přiřadit poli strukturám jako název. Moc díky za radu

FILE *file;
        int i = 0;
        char pole[50];
        char line[255];

        file = fopen("data.txt", "r");

        while (fgets(line, sizeof(line), file) != NULL) {

                pole[i] = line;
                i++;
        }

        fclose(file);

Vtupní soubor:

produkt 17
produkt 16
produkt 7
produkt 20
produkt 6
produkt 4
produkt 21
produkt 8
produkt 18
produkt 12
 
Odpovědět
15.12.2017 12:22
Avatar
Odpovídá na Unda
Matúš Olejník:15.12.2017 15:14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

    int i = 0, j;
    char *pole[50]; //pole pointerov na riadky
    char line[255];
    FILE *file;

    file = fopen("data.txt", "r");

    //načítaj riadok súboru
    while (fgets (line, sizeof(line), file) != NULL) {
        //alokuj pamäť o veľkosti toho riadku + 1 pre ukončovací znak
        pole[i] = (char*)malloc(sizeof(line + 1) * sizeof(char));
        //skopíruj riadok do alokovaného pola, aby si len neposúval pointer a teda by sa vždy vypísal len posledný riadok
        strcpy(pole[i], line);
        //na koniec riadku pridaj ukončovací znak
        pole[i][strlen(pole[i])] = '\0';
        i++;
    }

    fclose(file);

    //vypíš načítané riadky
    for( j = 0; j<i; j++){
        printf("%s\n",pole[j]);
    }

    return 0;
}
Nahoru Odpovědět
15.12.2017 15:14
/* I am not sure why this works but it fixes the problem */
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 2 zpráv z 2.