C#-Láncolt lista helyes létrehozása

C#-Láncolt lista helyes létrehozása
2014-04-17T17:34:11+02:00
2014-04-18T11:19:32+02:00
2022-10-15T23:05:39+02:00
Dodi0425
Sziasztok!

Egy csv fájlból szeretnék adatok tárolni egy láncolt listában. A cellákat szétdarabolom, és utána akarom egy láncolt listában elraktározni a cellák tartalmát sorban. A gond az, hogy a lista elején lévő elemek átíródnak. Töröm a fejem, de nem tudom, hogy mit rontottam el.
Íme a teljes kód:

#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#define ELVALASZTO ';'
#define SZOVEGHAT '"'
#define MAX 1024

typedef struct c{
int o; //oszlop
int s; //sor
char *adat;
struct c *kov;
}cella;

char* kovMezo(char*);
cella *listaVegere(cella *eleje, char *adat, int o, int s);
void listaKiir(cella *lista);

int main() {
FILE *csv=fopen("C:\Users\Dell\Documents\Beadandó\beadmod.csv", "rt");
char sor[MAX];
char *mezo;
int o=0,s=0;
cella *k=NULL;
setlocale(LC_ALL, "");

if(!csv) printf("A fájl megnyitása sikertelen.\n\n");
else{
while(fgets(sor, MAX, csv)) {
mezo=kovMezo(sor);
s++;o=0;
while(mezo ) {
o++;
printf("%s\n", mezo);
k=listaVegere(k,mezo,o,s);
mezo=kovMezo(NULL) ;
}
}
listaKiir(k);
fclose(csv);
}
getchar();
return 0; }


char* kovMezo(char* sor) {
static char* mm = NULL;
char *eleje, *vege;
char idezet = 0;
if(sor) mm = sor;
else if(!mm) return NULL;
eleje = vege = mm;
while(*mm && (*mm!=ELVALASZTO || idezet)) {
if(*mm == SZOVEGHAT)
if(!idezet) idezet = 1;
else if(*(mm+1) == SZOVEGHAT) *vege++ = *mm++;
else idezet = 0;
else *vege++ = *mm;
mm++; }
if(*mm) mm++; else mm=NULL;
*vege = '\0';
return eleje; }

cella *listaVegere(cella *eleje, char *adat, int o, int s) {
cella *mozgo, *uj;
uj=(cella*)malloc(sizeof(cella));
uj->adat = adat;
uj->o = o;
uj->s = s;
uj->kov = NULL;
if (eleje == NULL)
return uj;
for(mozgo = eleje; mozgo->kov!=NULL; mozgo=mozgo->kov)
;
mozgo->kov = uj;
return eleje;
}

void listaKiir(cella *lista) {
cella *iter;
if(!lista) printf("xxxxxxxxx");
for (iter=lista; iter->kov!=NULL; iter=iter->kov)
printf("%d %d %s\n", iter->s,iter->o, iter->adat);
printf("\n");
}
Mutasd a teljes hozzászólást!
uj->adat = adatt helyett uj->adat = strdup(adat)...
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd