Sziasztok!
Most kezdünk 'C'-ben programozni a suliban. Már most az elején elakadtam, szeretnék megtudni egy alapdolgot, lehet, hogy nem is ide kellene írnom, de, mivel az utána olvasgatások eredményeként a tanuláshoz Anjuta-t szeretnék használni (sokan dícsérték), itt teszem fel a kérdésemet (a suliban természetesen Win XP-n gyakorolunk, bár UHU is van a gépeken, csak nem nagyon esett szó arról, hogy ott hogyan is kell lefordítani/lefuttatni az elkészített programokat, ezért kérdezek itt). Na, mindegy...
Szóval: adott egy program, amely számokat ad össze. A számokat egy *.txt file-ból olvassa be, és addig fut, amíg 'EOF'-t nem lát. Az a kérdésem, hogy mivel tudom elérni, hogy a programfuttatásnál tényleg az adott filéből olvasson. Winen így néz ki a parancs a terminálban (vagy minek hívja): 'program
Most indítottam először Anjuta-t, és addig eljutottam, hogy lefordult a program, készült futtatható állomány is, el is lehet indítani, csak arra nem jöttem még rá, hogy miképpen lehet rávenni a file-ból olvasásra.
Jól jönne egy kis segítség
Köszönettel: eReL
- 2507 megtekintés
Hozzászólások
nem értelek.
#include
int main(){
FILE *file_descriptor;
file_descriptor=fopen("akármi.txt","r");
.
.
.
fclose(file_descriptor);
return 0;
}
és így az "akármi.txt" nevű fájlból fogsz olvasni linuxon és winen is
de nem értem mi nem megy neked.
- A hozzászóláshoz be kell jelentkezni
Köszi szépen.
Azonban nem a programból nyitottuk meg a file-t, hanem a futtatáskor a lefordított programot olyan paraméterrel indítottuk el, hogy ebből a file-ből olvasott. A parancs winen ez volt: 'program [Alt Gr]+[í] akarmi.txt'. Próbáltam így futtatni az 'Anjuta'-val elkészített futtatható programot, működött, de nem az 'akarmi.txt' file-ból olvasta az értékeket, hanem várta, hogy gépeljek. (első programozás konzultációnk volt ez, úgyhogy még nem vettük a file-műveletek programozását).
- A hozzászóláshoz be kell jelentkezni
uttatáskor a lefordított programot olyan paraméterrel indítottuk el, hat nem teljesen, ugyanis a <filename es >filename, nomeg a >>filename nem a programnak szol, hanem a shell-nek (WinFo$ eseten ez a cmd/command), a programodnak ilyen esetben lovese sincs arrol a "parameterrol" :-). Ezt atiranyitasnak hivjak es a dologrol a shell intezkedik, azaz a stdin-t vagy stdout-ot nem a billentyuzetrol, "kepernyore" organizalja, hanem a nevezett filebol/fileba... Ja, Un*x alatt is mukodik (sot ott mukodik csak igazan ;-)), ugyhogy ha valami nem ment akkor mashol kell keresni a problemat...
Zsiraf
- A hozzászóláshoz be kell jelentkezni
Na, igen. Ezt értem, hogy átirányítás.
De akkor miért nem megy linuxon, amikor karakterre ugyanaz a forrás (sőt több is) Winen jól működik?
Esetleg annyit még próbáljak meg, hogy pl.: 'gedit'-tel elmentem a szöveges file-t (ugyanis wines jegyzettömbbel írtuk-nem írtam felül a file-t egy linuxos szövegszerkesztővel még) ?
___
Semmi sem biztos. Még az sem biztos, hogy semmi sem biztos.
- A hozzászóláshoz be kell jelentkezni
IGEN! Olvass egy kicsit lejjebb is. Ha mcedittel megnyitod látni fogod hogy sorvégek helyett egy köteg '\M' lesz benne.
- A hozzászóláshoz be kell jelentkezni
Akkor csak megoldódik ez :D
Azonban estig várnom kell, mert az otthon van; ez meg, ugye munkahely, XP-vel...
Köszi!
___
Semmi sem biztos. Még az sem biztos, hogy semmi sem biztos.
- A hozzászóláshoz be kell jelentkezni
Na, kipróbáltam...
de sajnos nem megy továbbra sem.
Kipróbáltam a többi, órán írt programot is, és mind fut, kivéve azokat, amelyek fájlból akarnak olvasni... Pedig már 'mcedit'-tel kiszedtem a '^'-kat a sorok végéről :D
Dehát ezek OTT mentek :(
Mi az átirányítás szintaktikája? (Hova kell szóköz?)
___
Semmi sem biztos. Még az sem biztos, hogy semmi sem biztos.
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Megoldódott a gondom!
Igazatok volt: eennek így működnie KELL. Müködik is, de csak úgy, ha közvetlenül a terminálba írom be emígyen: './program 'kacsacsőr'szovegfile.txt'. Az volt a gondom, hogy az 'Anjuta'-n keresztül szerettem volna kipróbálni a programot, de -ezek szerint- úgy nem működik tökéletesen, csak közvetlenül a terminálban.
ui.: a "kacsacsőr" karakter még mindig levágja a hozzászólásom további részét... :(
__
Semmi sem biztos. Még az sem biztos, hogy semmi sem biztos.
- A hozzászóláshoz be kell jelentkezni
Hopp, ez kétszer ment :)
De le is vágta a hozzászólásom utolsó kétharmadát!!!
és nem tudom megszerkeszteni...
úgy látszik nem akarja a fórummotor, hogy megtudjam a válasz a kérdésemre... :D
ÜZENET trey-nek: Megvan a gond!!!
Az 'Alt Gr' + í, azaz "kacsacsőr" karakter levágja a hozzászólás további részét (vagy átirányítja vhova :D ) Így már sikerül kijavítanom az előzőt is...
___
Semmi sem biztos. Még az sem biztos, hogy semmi sem biztos.
- A hozzászóláshoz be kell jelentkezni
aha, már értem, szóval scanf()-ekkel olvas a progid a stdinről,
és átirányítod hogy stdin helyett fájlból olvasson :)
IMHO ennek működni kéne linuxon is. esetleg a sorvégekkel lehet gond.
- A hozzászóláshoz be kell jelentkezni
nem valami ilyesmi kéne neked?:
int main(int argc,char **argv) {
FILE *inputFile;
[...]
if ((inputFile = fopen(argv[1],"rt"))==NULL) {
/* stuff, ha nem sikerült megnyitni
} else {
/* stuff ha a megnyitás sikeres */
}
[...]
- A hozzászóláshoz be kell jelentkezni
Szerintem nem, IMHO a progija tele van scanf() hívásokkal,
és hogy ne kelljen annyit gépelni, írtak egy input.txt-t ami
kb ilyen formátumban lehet
15
25
21
15
EOF
az lehet a gond, hogy winen készült a szövegfájl, és a sorvége jelek fordítva vannak. most megnemmondom hogy ASCII 10 ASCII 13 vagy fordítva-e :)
- A hozzászóláshoz be kell jelentkezni
akkor viszont a kacsacsőr mér nem működik? scanf()-fel beolvassa a cuccost stdin-ről, a kacsacsőr meg megmondja, hogy az stdin az akarmi.txt. mondjuk a sorvége karakter az tényleg be tud keverni, de azt gondoltam, ha egyszerű C próbálgatás van linuxon, akkor ott álltak elő a tesztadatok.
- A hozzászóláshoz be kell jelentkezni
Attol, hogy a sorvege nem stimmel, meg a shell nem valt "vissza" a billentyure...
Szerintem inkabb a program egyszeruen "elszall" csak a billentyuzeten nyomkodott gombok "nyomot" hagynak a kepernyon, s baratunk ebbol arra kovetkeztetett, hogy a program inputra var...
Zsiraf
- A hozzászóláshoz be kell jelentkezni
nem hiszem hogy elszáll, csak a scanf() by def addig olvas amíg entert nem ütöttek neki, szóval ha nincs egy normális sorvége a fájlban még most is fut az a progi :)
- A hozzászóláshoz be kell jelentkezni
Igen... meg a file vege utan is olvas ;-) (-:
Zsiraf
- A hozzászóláshoz be kell jelentkezni
Na igen, köszi. Gondolkodhattam volna szövegelés előtt :-)
- A hozzászóláshoz be kell jelentkezni