Spojový seznam v C - zápis do souboru

Michal Kovacic

Re:Spojový seznam v C - zápis do souboru
« Odpověď #30 kdy: 04. 12. 2016, 12:29:28 »
Bývá obvyklé, že funkce která neudělá svoji práci vrátí nějaký chybový kód. Ten alespoň orientačně napoví co se stalo...


Teo_90

Re:Spojový seznam v C - zápis do souboru
« Odpověď #31 kdy: 04. 12. 2016, 16:18:51 »
Bývá obvyklé, že funkce která neudělá svoji práci vrátí nějaký chybový kód. Ten alespoň orientačně napoví co se stalo...

To já vim taky, nicméně ono se to zkompiluje a fce se tváří, že se provedla, nicméně nic neudělá.
Soubor zůstane tam kde je...
Takže to přisuzuji tomu, že používám st. makro, který mi definuje cestu k souboru?

Jenda

Re:Spojový seznam v C - zápis do souboru
« Odpověď #32 kdy: 04. 12. 2016, 20:54:07 »
To já vim taky, nicméně ono se to zkompiluje a fce se tváří, že se provedla, nicméně nic neudělá.
Přečti si man 3 remove:
Citace
On success, zero is returned.  On error, -1 is returned, and errno is set appropriately.
a vypiš si to číslo (a pokud možno i perror(3)).

Thomas

Re:Spojový seznam v C - zápis do souboru
« Odpověď #33 kdy: 27. 12. 2016, 18:46:37 »
Zdravim,
potřeboval bych pomoct s indexováním prvků při vkládání do spojového seznamu.
A pak ještě pomoct s rozběhem jednotlivých modulů v C.

tady jsou zdrojáky pro indexování při vkládání parametrů:

Kód: [Vybrat]
#ifndef FUNKCE_H
#define FUNKCE_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#include <string.h>
#include "katalog.h"
#define CESTA "/home/teodor/Plocha/Parametry_exoplanet.txt"                     // definovana cesta ke ctenemu souboru
#define ROZSAH 100                                                              // Staticka makro konstanta pro velikost nazvu parametru
#define ROZSAH_RADKY 300                                                        // Staticka makro konstat pro velikost radky



void menu();                                                                                                                           // Prototyp fce pro menu
void smaz_katalog(KATALOG **pps);                                                                                                      // Prototyp fce pro smazani katalogu
void smaz_soubor();                                                                                                                    // Prototyp fce pro smazani souboru
void vkladani_parametru(KATALOG **pps, char *parametr_1, long int parametr_2, long int parametr_3, long int parametr_4, int index);         // Prototyp fce pro vkladani parametru exoplanet
void hledani_parametru(const KATALOG *pps, int index);                                                                                 // Prototyp fce pro mazani jednotlivych parametru
int zapis_do_souboru(char *parametr_1, long int parametr_2, long int parametr_3, long int parametr_4);                                    // Prototyp fce pro ukladani do souboru
int cteni_ze_souboru();                                                                                                                  // Prototyp fce pro cteni ze souboru                                                                                     




#endif

Kód: [Vybrat]
#ifndef KATALOG_H
#define KATALOG_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#include <string.h>
#include "funkce.h"
#define ROZSAH_NAZVU 100




typedef struct katalog {                                            // Struktura prvku

    char nazev[ROZSAH_NAZVU];                                            // Prvek nazvu exoplanety
    int hmotnost;                                                   // Prvek hmotnosti exoplanety
    int jasnost;                                                    // Prvek jasnosti exoplanety
    int radial_rychlost;                                            // Prvek radialni rychlosti exoplanety
   
    struct katalog *nasledujici;                                    // Pointer struktury katalog na nasledujici prvek

} KATALOG;




#endif

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#include <string.h>
#include "funkce.h"
#include "katalog.h"



void vkladani_parametru(KATALOG **pps, char *parametr_1,long int parametr_2, long int parametr_3, long int parametr_4, int index) {
   
    KATALOG *ps;                                                                            // Pointer na strukturu katalog
       
    int idx = 0;                                                                            // pomocna promenna k porovnavani indexu od 0
   
     
   
    if(idx == index) {                                                                      // Porovnani parametru s hodnotou indexu
       
        ps = (KATALOG *) malloc(sizeof(KATALOG));                                           // Osetreni dynamickeho prideleni pameti
   
                if(ps == NULL) {   
       
                    fputs("Chybna alokace pameti!\n", stderr);                              // Pokud se neprideli pamet, vypise se chybove hlaseni
                                                                                            // a na chybovy vystup stderr
        return;   
       
    }
       
        if(ps) {
           
                                                                                     // Vsechny parametry exoplanety budou mit stejny index pro hledani
                 strcpy(ps->nazev, parametr_1);                                      // Pridani prvku do spoj. seznamu
                 ps->nasledujici;                                                    // Posun na dalsi prvek v rade
                 ps->hmotnost = parametr_2;                                          //            -//-
                 ps->nasledujici;   
                 ps->jasnost = parametr_3;
                 ps->nasledujici;                                                                 
                 ps->radial_rychlost = parametr_4 ;
               //  ps->nasledujici = NULL;                                             // Ukazuje na konec seznamu
             
   
                 *pps = ps;     
                   
           
        }     
         
    }
   
   
};

K té modulárnosti...mám implementaci jednotlivých fcí v .c souborech, třeba cteni_ze_souboru.c, v NetBenas se to přeloží, ale program nedělá to co má. Asi jsem někde něco neprovázal nebo nevim, ale když to udělám prasácky a výkonný kód nacpu do headers tak to běží tak jak má. Stejně když ty jednotlivé moduly kompiluji přes gcc -wall, přeloží se to, ale program nic nedělá.


Thomas

Re:Spojový seznam v C - zápis do souboru
« Odpověď #34 kdy: 27. 12. 2016, 19:57:39 »
Modulárnost je už vyřešena, volal jsem si fci menu úplně zbytečně, proto to nic nedělalo.