Hirdetés
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Viber: ingyen telefonálás a mobilodon
- eBay-es kütyük kis pénzért
- Doky586: SecureBoot kulcsok frissítése (2026 nyara)
- GoodSpeed: Daikin FTXF35E / RXF35F Sensira 3,3 kW Inverteres klíma - a Sztori
- mefistofeles: Az elhízás nem akaratgyengeség! 2 Ahogy én csinálom.......
- MasterDeeJay: Comet lake (10gen) és DDR3 - mert ilyet is lehet!
- talmida: Változások 2. rész
Ú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!
- E-roller topik
- Luck Dragon: Asszociációs játék. :)
- AMD FX
- Dell notebook topic
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Debrecen és környéke adok-veszek-beszélgetek
- iPhone topik
- A TCL egyebek mellett egy 1040 Hz-re képes monitorral készül az idei évre
- VR topik
- Micro Four Thirds
- További aktív témák...
- Magyar kiosztású Apple Magic Keyboard 2, Touch ID, teljes méretű
- Új Mac Studio M4 Max 2025 14C CPU /32C GPU / 36GB RAM / 512GB - 1 ÉV APPLE GARANCIA
- 2026 MacBook Air / MacBook Pro / M5 - M5 Pro - M5 MAX 14" / 16"
- Asus 15.6,core i3 8145U(4x3,9Ghz)IntelUHD VGA,MAGYAR Vil.bill.,8-20GB RAM,SSD+HDD?,,Win.11
- LG UltraGear 27GS85Q-B NanoIPS/2K/200HZ (068)
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
