Indul a MetNet előrejelzési verseny sorozatának 45. sorozata
Ezt a részt ilyenné alakítottam, ahogy mondtad: const char* input[] = {"mars20090216_0000+3.nc2", "mars20100210_0000+24.nc2", "mars20090216_0000+6.nc2" }; + javítottam a ciklusokban az elírást. Ezzel a *-gal én még…
Ezt a részt ilyenné alakítottam, ahogy mondtad:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
+ javítottam a ciklusokban az elírást.
Ezzel a *-gal én még hadilábon állok, nem tudom, hogy az input[] és output tömböket kell-e még definiálni, vagy ez elég:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
Abban sem vagyok biztos, hogy ez utóbbit a main-en belül vagy kívül kell definiálni, ha belül hagyom, akkor Segmentation fault a vége, ha kívül, akkor no such file or directory hiba.
A for cikluson belül elég akkor így?
nc_open(input[m], NC_NOWRITE, &ncid)
nem kell se & se * az input elé?
Ez az input és output definiálása, azonnali értékadással. Elvileg elégnek kellene lennie... A fileneveknél a teljes elérési útvonalat meg kellene adni a file nevével együtt, hogy tényleg megtalálja, hogy mit kell…
Ez az input és output definiálása, azonnali értékadással. Elvileg elégnek kellene lennie...
A fileneveknél a teljes elérési útvonalat meg kellene adni a file nevével együtt, hogy tényleg megtalálja, hogy mit kell megnyitni. Ezt a main-ben kell megadni, ha ott is használod fel az nc_open-ben.
Ezt találtam a neten az nc_open() függvényre:
int nc_open (const char *path, int omode, int *ncidp);
Ha ugyanezt hívod meg a programban, akkor az elsõ paraméternek egy const char-ra mutató pointernek kell lennie, az input[m] pont ilyen. A függvény paramétereként nem kell elé semmi, csak input[m].
A fv második paramétere egy int, gondolom az NC_NOWRITE az az.
A fv 3. paramétere pedig egy int-re mutató pointer. mivel gondolom az ncid csak egyszerû int-ként van definiálva, az elé oda kell tenni a függvényben való felhasználáskor a &-t, hogy a változó címére mutasson (mintha pointer lenne).
De az elsõ paraméternél nem kell semmi, mert az már eleve pointerként van definiálva.
Mielõtt a for cikluson belül az nc_open(input[m], NC_NOWRITE, &ncid)-ben felhasználod az input[m]-et, elõbb ki is irathatnád a képernyõre mondjuk így:
puts(input[m]);
hogy lásd, hogy jó-e az aktuális input[m] értéke, amit felhasználnál a fv-ben.
(file elérési útvpnal is legyen jól benne!)
Ha valamiért nem szereti a compilered az input/output elõbbi definiálását és értékadását, akkor így is kipróbálhatod:
const char* input[3]; //3 konstans stringet tartalmazó tömb létrehozása
input[0] = "mars20090216_0000+3.nc2"; //String értékadás egyenként
input[1] = "mars20100210_0000+24.nc2";
input[2] = "mars20090216_0000+6.nc2";
Természetesen ekkor is a teljes elérési úttal kellene a file-neveket megadni.
Vigyázni kell arra is, hogy az input ill. output indexe ne fusson túl jelen esetben 2-n, mert akkor azonnal segmentation fault lehet...
Ezt a részt ilyenné alakítottam, ahogy mondtad: const char* input[] = {"mars20090216_0000+3.nc2", "mars20100210_0000+24.nc2", "mars20090216_0000+6.nc2" }; + javítottam a ciklusokban az elírást. Ezzel a *-gal én még…
Ezt a részt ilyenné alakítottam, ahogy mondtad:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
+ javítottam a ciklusokban az elírást.
Ezzel a *-gal én még hadilábon állok, nem tudom, hogy az input[] és output tömböket kell-e még definiálni, vagy ez elég:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
Abban sem vagyok biztos, hogy ez utóbbit a main-en belül vagy kívül kell definiálni, ha belül hagyom, akkor Segmentation fault a vége, ha kívül, akkor no such file or directory hiba.
A for cikluson belül elég akkor így?
nc_open(input[m], NC_NOWRITE, &ncid)
nem kell se & se * az input elé?
A "char" tipus csak egyetlen karaktert jelöl a C-ben. Ha egy tömböt csinálsz belöle, akkor kapsz karaktersorozatot (pl. egy filenév). A definicioban szereplo []-vel adod meg, hogy tömbröl van szó, illetve megadható…
A "char" tipus csak egyetlen karaktert jelöl a C-ben. Ha egy tömböt csinálsz belöle, akkor kapsz karaktersorozatot (pl. egy filenév). A definicioban szereplo []-vel adod meg, hogy tömbröl van szó, illetve megadható számmal ennek hossza.
Igy pl. ez: const char input[3] egy 3 karakterböl álló konstans karaktertömböt (sztringet) jelöl. Ami még csak egyetlen rövidke file-név lehetne, nem pedig 3, amit szeretnél.
Igy ez szerintem nem felel meg az adott célnak:
const char input[3] = { mars20090216_0000+3.nc2, mars20100210_0000+24.nc2,
mars20090216_0000+6.nc2 };
const char output[3] = {bspi20090127_0000+00300.nc, bspi20090127_0000+00600.nc, bspi20090127_0000+00900.nc };
Helyette hozz létre egy pointert, ami a megadott sztringek (idezöjellel megadandó!!!) elsö karakterére fog mutatni mindig, igy:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
const char* output[] = {"bspi20090127_0000+00300.nc",
"bspi20090127_0000+00600.nc",
"bspi20090127_0000+00900.nc"};
Itt tehát az input[0] az elsö beolvasando file nevére (pontosabban annak elsö karakterére) mutat, az input[1] a másodikra, stb.
Ekkor már müködnie kell a retval = nc_open(input[m],... -nek
illetve a retval = nc_create(output[n],... -nek
Feltéve, hogy az nc_open() es az nc_create() függvény elsö argumentumának const char* tipusunak kell lennie. Remélhetöleg annak. Ha nem, akkor még a kivant tipusba kell konvertálni...
Szerk: rákerestem, s annak kell lennie, mert:
int nc_open (const char *path, int omode, int *ncidp);
Amit még eszrevettem kódodban, hogy a ciklusoknál kis elirás becsuszott:
for(m=0; m kisebb 3; i++)
for(n=0; n kisebb 3; i++)
Itt m++ illetve n++ kell persze az i++ helyett.
A "char" tipus csak egyetlen karaktert jelöl a C-ben. Ha egy tömböt csinálsz belöle, akkor kapsz karaktersorozatot (pl. egy filenév). A definicioban szereplo []-vel adod meg, hogy tömbröl van szó, illetve megadható…
A "char" tipus csak egyetlen karaktert jelöl a C-ben. Ha egy tömböt csinálsz belöle, akkor kapsz karaktersorozatot (pl. egy filenév). A definicioban szereplo []-vel adod meg, hogy tömbröl van szó, illetve megadható számmal ennek hossza.
Igy pl. ez: const char input[3] egy 3 karakterböl álló konstans karaktertömböt (sztringet) jelöl. Ami még csak egyetlen rövidke file-név lehetne, nem pedig 3, amit szeretnél.
Igy ez szerintem nem felel meg az adott célnak:
const char input[3] = { mars20090216_0000+3.nc2, mars20100210_0000+24.nc2,
mars20090216_0000+6.nc2 };
const char output[3] = {bspi20090127_0000+00300.nc, bspi20090127_0000+00600.nc, bspi20090127_0000+00900.nc };
Helyette hozz létre egy pointert, ami a megadott sztringek (idezöjellel megadandó!!!) elsö karakterére fog mutatni mindig, igy:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
const char* output[] = {"bspi20090127_0000+00300.nc",
"bspi20090127_0000+00600.nc",
"bspi20090127_0000+00900.nc"};
Itt tehát az input[0] az elsö beolvasando file nevére (pontosabban annak elsö karakterére) mutat, az input[1] a másodikra, stb.
Ekkor már müködnie kell a retval = nc_open(input[m],... -nek
illetve a retval = nc_create(output[n],... -nek
Feltéve, hogy az nc_open() es az nc_create() függvény elsö argumentumának const char* tipusunak kell lennie. Remélhetöleg annak. Ha nem, akkor még a kivant tipusba kell konvertálni...
Szerk: rákerestem, s annak kell lennie, mert:
int nc_open (const char *path, int omode, int *ncidp);
Amit még eszrevettem kódodban, hogy a ciklusoknál kis elirás becsuszott:
for(m=0; m kisebb 3; i++)
for(n=0; n kisebb 3; i++)
Itt m++ illetve n++ kell persze az i++ helyett.