Hogyan kell számokat beolvasni fájlól 2 dimenziós tömbbe?
Van több szöveges fájlom, amiben mátrixos elrendezésben számok vannak. A feladat az amit írtam a kérdésben, viszont ezt külön függvénnyel kell megoldani. Ha csak a main-ben csinálom (értsd függvény nélkül), úgy már jó, de nyilván az lenne a lényeg, hogy ne kelljen ötezerszer leírni a dupla for ciklust minden fájlra. Érthetőbb lesz ha bemásolom a kódot ami eddig van:
(olvashatóbban itt: [link] illetve benne a valami.txt tartalma)
#include <stdio.h>
void szamok(const char *filename, int n, int m, double tomb[n][m])
{
FILE *file = fopen(filename, "r");
if(file != NULL)
{
int i, j;
for( i = 0; i < n; i++)
{
for( j = 0; j < m; j++)
{
if (!fscanf(file, "%lf", &tomb[n][m]))
break;
}
}
fclose(file);
}
else
{
perror(filename);
}
}
int main()
{
int n = 2, m = 4, i, j;
double test[n][m];
const char filename[] = "valami.txt";
szamok(filename, n, m, test);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%lf ", test[i][j]);
}
printf("\n");
}
return 0;
}
Ez azért nem jó, mert amikor kiíratnám a main-ben, csupa 0-át ír, vagy azon a memterületen lévő akármilyen számokat, bizonyára valami pointeres dolog lesz, vagy elvi hiba, de nem tudok rájönni :(
if (!fscanf(file, "%lf", &tomb[n][m]))
helyett
if (!fscanf(file, "%lf", &tomb[i][j]))
Senki sem szereti igazán a VLA-t. C99-ben berakták és egyből ki is szedték. A tömb méretét konstans kifejezéssel add meg mindig, vagy makróval definiáld. Ha nem ismered fordítási időben azt, akkor dinamikusan foglalj területet.
ANSI C-ben pedig a printf() függvénynél nem értelmezett az %lf, csak az %f. Ezt is érdemes figyelembe venni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!