- Ismét egy "Idióta" A.I. Projekt, hogy meglovagolja az aktuális trendeket...
- Időutazás floppyval: A 486-os visszavág PCem-men
- AMD Ryzen 9 9900X (100-100000662WOF)+ Samsung 990 PRO 2TB MZ-V9P2T0BW
- Processzor és videokártya szilícium mag fotók újratöltve!
- Az e-sport napistenének ajándéka: Lamzu Inca gamer egér
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- LordAthis: Ismét egy "Idióta" A.I. Projekt, hogy meglovagolja az aktuális trendeket...
- Klaus Duran: Youtube AI szinkron
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Magga: PLEX: multimédia az egész lakásban
- gban: Ingyen kellene, de tegnapra
- laskr99: Processzor és videokártya szilícium mag fotók újratöltve!
- Okos Otthon kezdőknek
Hirdetés
Új hozzászólás Aktív témák
-
Rickazoid
addikt
Üdv!
Akadt némi problémám egy programommal. Gyakorlatilag kész vagyok vele, látszólag pont úgy működik, ahogy kell, azonban a tesztelés közben belefutottam egy jókora problémába. Bizonyos helyzetekben a fájlból beolvasott számokat lenullázza. Beolvassa jól a számot, mint karaktert, de a számmá alakításnál 0 kerül a változókba. Látszólag számtól független, bármi lehet ott, rendesen átalakítja, amíg csak pár sor van. De ha ismétlődnek a sorok, akkor akármennyit átalakít, ahogy kell. Ha ugyanannyi van, mintha ismétlődne, de más a tartalom, akkor is jól működik. De ha az eredeti tesztfájlba csak még egy sort beírok, máris rossz lesz. Illetve akkor is rossz lesz, ha bizonyos sorokat meghosszabbítok. Magyarul számtalanszor előidéztem a hibát, de abszolút semmi fogalmam nincs róla, hogy mi lehet a gond.
A kérdéses része a programomnak a következő:
#include <stdio.h>
#include <stdlib.h>
#define MAXID 100
#define MAXLEN 20
#define OUTF "AdatbazisTeszt3.ctlg"
void printFile2Mem()
{
long size;
rows=0;
I=0;
//az OUTF által hivatkozott fájl létrehozása, ha nem létezne
FILE *f;
f=fopen(OUTF, "a");
fclose(f);
//a fájl megnyitása olvasásra
FILE *ff;
ff = fopen(OUTF, "rt");
fseek(ff, 0, SEEK_END); //a fájl végének megkeresése
size = ftell(ff); //a file pointer beolvasása, megadja a fájl méretét
fseek(ff, 0, SEEK_SET); //vissza a fájl elejére
//printf("%d\n",size);
//a buffer tömbök átmeneti tárolóként funkcionálnak majd a fájlból beolvasandó adatoknak
char buffer[size+1],buffer2[size+1],buffer3[size],buffer4,c;
//a teljes fájl beolvasása a buffer[] tömbbe
fread(buffer, 1, size, f);
buffer[size]=0;
//fclose(f);
//printf("The file:\n%s\n", buffer);
//segédváltozók a ciklusokhoz, amik a buffer[] tömbből olvassák ki az adatokat és teszik a megfelelő átmeneti tárolóba
int i=0,j=0,k=0,l=0,ii;
fseek(ff, 0, SEEK_SET); //ismét a fájl elejére állítja a mutatót
//beolvassa a rows globális változóba a sorok számát
while((c=fgetc(f))!=EOF)
if(c=='\n')rows++;
//a fájl bezárása
fclose(ff);
printf("%d\n",rows);
printf("The file:\n");
//a buffer[] tömb elemeinek megfelelő tömbökbe helyezése
for(ii=0;ii<rows;ii++)
{
j=0;
while(buffer2[l++]!=EOF)buffer2[l-1]='\0';l=0; //enélkül hibák keletkeznek a különböző hosszúságú értékek ugyanazon tömbbe tárolásakor
//a buffer2[] tömbbe beolvassa az aktuális sor ID-jét
//egyelőre szövegként kezeli
while(buffer[i++]!=';')
if(buffer[i-1]>='0'&&buffer[i-1]<='9')
buffer2[j++]=buffer[i-1];
printf("buffer: %s\n",buffer2);
j=0;
while(buffer3[l++]!=EOF)buffer3[l-1]='\0';l=0; //enélkül hibák keletkeznek a különböző hosszúságú értékek ugyanazon tömbbe tárolásakor
//a buffer[3] tömbbe beolvassa az aktuális sor nevét
while(buffer[i++]!=';')buffer3[j++]=buffer[i-1];
//printf("buffer: %s\n",buffer3);
//buffer4='\0'; //bár a buffer4 csak egy karakteres változó, biztosítékként bekerült ez az értékadás a buffer[] tömbből való értékadás elé
//eltárolja a buffer4 változóba az aktuális sor típusát
buffer4=buffer[i];
//az ID[] tömbb adott helyére eltárolja a buffer2-ben tárolt stringet integerként
printf("buffer: %s\n",buffer2);
ID[I]=atoi(buffer2);
printf("ID: %d\n",ID[I]);
//a Name[][] tömb adott helyeire eltárolja a buffer[] tömb elemeit
while(Name[I][l]=buffer3[l++]);l=0;
//a Tpy[] tömb adott helyére eltárolja a buffer4 értékét
Tpy[I++]=buffer4;
//kezdetlegesen formázott kiírása az adatbázis elemeinek
//printf("%d\t%s\t%c\n", ID[ii],Name[ii],Tpy[ii]);
}
}Namost sejtem, hogy nem valami szép (és a tömbök méretei sincsenek egyelőre pontosan beállítva), de ennél jobbat egyelőre nem tudok írni. A hiba valahol a vége felé lehet, kiírattam a buffer2 változó értékét két helyen is, amikor az ID-tömbbe 0-kat rak, akkor a második kiíratásnál üres. Valamiért a kettő közt történik vele valahogy valami, viszont nem értem hogy, hisz nem nyúl hozzá semmi.
Egy példafájl:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
5;ötös;CEzzel működik. De például ezzel már nem:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
5;ötös;C
6;hatos;CEzzel sem:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
512;ötszáztizenkettő;CEzzel viszont igen:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
512;ötszáz;CEz utóbbinál ha megnövelem egy nem ékezetes karakterrel az utolsó sort, akkor még működik, de nagyobb növelést nem visel el. Amikor ezt észrevettem, azt hittem valami bájt korlátba ütköztem, de nem, ha a címsor alatti sorokat lemásolom és újra beillesztem, akkor is jól működik. Sőt ha egyenként átírom az ID-ket és össze-vissza írok karaktereket a nevekbe, hogy ne legyen ismétlődés, még akkor is működik. Sőt ha azt kibővítem egy akármilyen sorral (13.), az is működik. De ha még egy sort hozzáadok (14.), -1 hibakóddal kilép. De ha törlöm és beírok 13 sort, azonos karakterszámmal, csak más tartalommal, akkor működik. De ha azt bővítem ki egy sorral, megint jön a -1 hibakód. Ha lecsökkentem a nevek hosszát majd úgy írok be 14 sort, akkor nem kapok hibakódot, de 0-k lesznek az ID tömbben.
Nem vagyok képes felismerni a rendszert a hibákban, mintha több dolog is hibát váltana ki, de képtelen vagyok rájönni, hogy miért.
Ötletek?
Ú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!
- One otthoni szolgáltatások (TV, internet, telefon)
- PlayStation 5
- Sony Xperia 1 VII - Látod-e, esteledik
- Nincs kill switch az NVIDIA chipekben
- Kés topik
- Azonnali informatikai kérdések órája
- Star Wars rajongók
- Jogász topic
- Azonnali alaplapos kérdések órája
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- Xiaomi Redmi Note 10 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- Lenovo IdeaPad Gaming 3 - 15.6" FHD IPS 165Hz - Ryzen 5-5600H - 16GB - 512GB - RTX 3050 Ti - Win11 P
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- 13-14" Új és használt laptopok , üzletitől a gamerig , kedvező áron. Garanciával !
- Bomba ár! Dell Latitude 5401 - i5-9400H I 8GB I 256SSD I 14" FHD I HDMI I Cam I W11 I Gari!
Állásajánlatok
Cég: FOTC
Város: Budapest