- Samsung Galaxy A54 - türelemjáték
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Megérkezett a Samsung Galaxy A37 és Galaxy A57
- Apple iPhone 16 - ígéretek földje
- iPhone topik
- Mobil flották
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Motorola Moto G06 Power – nagyfater új zakót vett
- Google Pixel topik
Új hozzászólás Aktív témák
-
0xmilan
addikt
válasz
skylaner
#4269
üzenetére
Köszi, jogos.
Megnéztem egy régebbi példát, és annak mintájára külön függvénnyel fűztem a lista elejére.
Most így néz ki a működő verzió:
...
while(!feof(fp)){
fgets(temp, 256, fp);
sscanf(temp, "%d %[^\t] %[^\t] %[^\t] %[^\t] %[^\t] %c", &szint, &tempk, &tempa, &tempb, &tempc, &tempd, &valasz);
lista=elejere(lista, szint, tempk, tempa, tempb, tempc, tempd, valasz);
}
}
...
Kerdes* elejere(Kerdes *lista, int szint, char* tempk, char* tempa, char* tempb, char* tempc, char* tempd, char valasz){
Kerdes *uj;
uj=(Kerdes*) malloc(sizeof(Kerdes));
uj->szint=szint;
uj->ker=(char*) malloc((strlen(tempk)+1)*sizeof(char));
strcpy(uj->ker,tempk);
uj->a=(char*) malloc((strlen(tempa)+1)*sizeof(char));
strcpy(uj->a,tempa);
uj->b=(char*) malloc((strlen(tempb)+1)*sizeof(char));
strcpy(uj->b,tempb);
uj->c=(char*) malloc((strlen(tempc)+1)*sizeof(char));
strcpy(uj->c,tempc);
uj->d=(char*) malloc((strlen(tempd)+1)*sizeof(char));
strcpy(uj->d,tempd);
uj->valasz=valasz;
uj->kov=lista;
return uj;
}Most fgets-szel beolvasok egy sort, aztán sscanf-fel meg tabulátoronként darabolom és aztán rakom új listaelembe.
A listának meg nem is kellett volna helyet foglalni, mert az csak egy pointer..
Még egyszer kösz a segítséget mindenkinek! -
0xmilan
addikt
válasz
skoda12
#4264
üzenetére
Ezer köszi segítséget!
A túlindexelést egy levlistán olvastam, aztán bele se gondoltam, hogy hülyeség.
..Pont az a baj, hogy nem ismert a stringek hossza, és - bár megadhatnék egy max. hosszt - , a lényeg, hogy egy bájttal se használjak több memóriát, mint amennyi tényleg kell.Kösz a tippet a dubeggerre. Korábban már használtam, de elszoktam tőle, aztán megmutatta, hogy működik a beolvasás, csak nem úgy, ahogy én azt gondoltam.
tempk-ba egy kérdést várnék (legyenönismilliomost írok), amiben ugye több szóköz van, én meg azt hittem, hogy majd kitalálja meddig tart a kérdés.
Így utólag elég hülyének érzem magam.
Szóval elkezdte szépen bepakolni a kérdés egyes szavait a válaszok sztringjeibe.
Ezek szerint itt az fscanf nem is használható..? Mindenképpen karakterenként kéne beolvasni?Olyat tudok, hogy karaktert vizsgálni, azon belül meg stringet olvasni?
pl így:while (fgetc(fp) != '9'){ - elvileg a TAB kódja
fscanf(fp, "%s", &tempk);
...+ mindig hozzáfűzögetni az új szavakat;
} -
0xmilan
addikt
válasz
skoda12
#4262
üzenetére
Tényleg, köszi! Nem is a listaba, hanem az uj-ba kellett volna beolvasnom, meg strcpy-zni aztán onnan meg a lista=uj és akkor elvileg az elejére fűződik.
átírtam az adott részt így:
uj->ker=(char*) malloc((strlen(tempk)+1)*sizeof(char));
lista->ker=(char*) malloc((strlen(tempk)+1)*sizeof(char));
strcpy(uj->ker,tempk);
uj->ker[strlen(tempk)+1]='\0';
uj->a=(char*) malloc((strlen(tempa)+1)*sizeof(char));
lista->a=(char*) malloc((strlen(tempk)+1)*sizeof(char));
strcpy(uj->a,tempa);
stb
.
.és akkor a végére mindig be kéne szúrni a \0-t így?:
uj->ker[strlen(tempk)+1]='\0';Ha jól tudom azért kell NULL-lal hívni, mert akkor az lesz a vége és így tudom bejárni, hogy a nullpointer a kilépési feltétel.
(ja amúgy ugyanúgy lefagy)
-
0xmilan
addikt
Üdv, láncolt listába szeretnék beolvasni fájlból.
Így néz ki a struktúra:
typedef struct Kerdes{
int szint;
char *ker, *a, *b, *c, *d;
char valasz;
struct Kerdes *kov;
} Kerdes;és a függvény:
Kerdes* beolvas(Kerdes *lista){
FILE *fp;
Kerdes *uj;
char c;
uj=(Kerdes*) malloc(sizeof(Kerdes));
lista=(Kerdes*) malloc(sizeof(Kerdes));
char tempk[256], tempa[50], tempb[50], tempc[50], tempd[50];
fp = fopen("loim.txt", "rt");
if (fp == NULL) printf("Nem sikerült megnyitni!");
else{
while(!feof(fp)){
fscanf(fp, "%d %s %s %s %s %s %c\n", &uj->szint, tempk, tempa, tempb, tempc, tempd, &uj->valasz);
uj->ker=(char*) malloc(strlen(tempk)*sizeof(char));
strcpy(lista->ker,tempk);
uj->a=(char*) malloc(strlen(tempa)*sizeof(char));
strcpy(lista->a,tempa);
uj->b=(char*) malloc(strlen(tempb)*sizeof(char));
strcpy(lista->b,tempb);
uj->c=(char*) malloc(strlen(tempc)*sizeof(char));
strcpy(lista->c,tempc);
uj->d=(char*) malloc(strlen(tempd)*sizeof(char));
strcpy(lista->d,tempd);
uj->kov=lista;
lista=uj;
}
}
fclose(fp);
return lista;
}és így hívnám meg main-ben:
Kerdes *lista=NULL;
beolvas(lista);Hiba nélkül lefut, de amint elindul, le is fagy. Mi lehet a gond?
(életem első fájlból olvasása lenne C-ben. korábban csináltam már C#-ban, de ott ugye nem kellett a dinamikus dolgokkal szórakozni. amúgy azt az infót kaptam, hogy ha így elszáll, akkor az pointerek miatt van, de fogalmam sincs hogy hol.)
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kertészet, mezőgazdaság topik
- Samsung Galaxy A54 - türelemjáték
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Mibe tegyem a megtakarításaimat?
- Megérkezett a Samsung Galaxy A37 és Galaxy A57
- Luck Dragon: Asszociációs játék. :)
- Derekas áremelést jelentett be az ASUS
- Battlefield 6
- Trollok komolyan
- Formula-1
- További aktív témák...
- HyperX Predator 2x8GB 3200mhz DDR4 ram CL 16 !!!! - RGB !!!!
- IdeaPad 3 15ARH05 15.6" FHD IPS Ryzen 5 4600H GTX 1650 16GB 512GB NVMe magyar vbill gar
- i7-8700K / ASUS Z370-E / GTX 1080 Ti komplett gép
- PNY GeForce RTX 4070 Ti SUPER 16GB XLR8 Gaming VERTO EPIC-X RGB
- Samsung Galaxy S25 eladó, független, garanciális (ses.hu, 2028 júniusig)
- Keresünk iPhone 15/15 Plus/15 Pro/15 Pro Max
- Apple iPhone 13 / 128GB / Kártyafüggetlen / 12Hó garancia / Akku:100%
- Bomba ár! Asus Zenbook UX563 i7-10G I 16GB I 512SSD I GTX1050 I 15,6" FHD Touch I Cam I W11 I Gari!
- Apple MacBook Pro 14,2 11" i5 16GB 256GB SSD szép állapot - Leírást olvasd el!
- REFURBISHED és ÚJ - Lenovo ThinkPad 40AY Universal USB-C Dock
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

Így utólag elég hülyének érzem magam.
