Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#2201) Kurik


Kurik
tag

hm...aha ez is jó progi de mi csak turbo c-t használhatunk vizsgán és azért akartam azon gyakorolni...ha másnak van ötlete azért meghallgatom :)

Ha tévedek, ki lehet javítani :)

(#2202) bpx válasza j0k3r! (#2199) üzenetére


bpx
őstag

tudsz:
- c++ projektet kell létrehozni (win32 console app pl.)
- wizardban bepipálod, hogy üres projekt legyen
- és C header-öket/szintaktikát használsz :)

(#2201) Kurik: na akkor még jobb lesz a CodeBlocks
Turbo C megenged bármit, ebben jobban megtanulsz programozni

[ Szerkesztve ]

(#2203) j0k3r! válasza bpx (#2202) üzenetére


j0k3r!
senior tag

koszonom szepen.

some men just wanna watch the world burn...

(#2204) Zalaymate


Zalaymate
senior tag

Hali!

Volna egy beadandó feladatom, amit hétfőn le kell adnom, de nekem ez még magas így csípőből és ezért kérném a segítségeteket!

Egy kis programot kell írnom sima C-ben, ami tulajdon képpen egy kis adatbázis kezelő program.

Elég ha a konzolban fut és ott írja kis a következőket:

Alap menü:
1. Új adat bevitele
2. Adat módosítása
3. Keresés
4. Listázás
5. Kilépés

Az egyes menüpontokból vissza kell tudjon lépni a főmenübe.

Az adatoknak pedig 3 tulajdonságuk kell legyen: sorszám, név, adat (szöveg)

Lenne erre ötletetek? Elég gázos a helyzet.... :U

(= Zala =)

(#2205) j0k3r! válasza Zalaymate (#2204) üzenetére


j0k3r!
senior tag

hello!

menuvezerleshez: do-while, switch-case
+4 sajat fuggveny (uj, modosit, keres, listaz)

some men just wanna watch the world burn...

(#2206) Kurik válasza bpx (#2202) üzenetére


Kurik
tag

köszi!

hiszek nektek... :)

Ha tévedek, ki lehet javítani :)

(#2207) Peteeke válasza Zalaymate (#2204) üzenetére


Peteeke
csendes tag

Szia!

Nekem volna erre egy példám.
Nekem is kelett ilyen menüszerkezetet csinálnom.

int main()
{
int ch;
while(ch!=27)
{
menu();
ch=getch();
switch(ch)
{
case'1':ascii();break;
case'2':file();break;
case'3':kor();break;
case'4':szamol();break;
}
}
return 0;
}
void menu()
{
printf("\n\n\t M\tE\tN\tU\t\n");
printf("\n\n");
printf("\t1. ASCII kodtabla\t\n");
printf("\t2. Szoveges fajl letrehozas\t\n");
printf("\t3. Kor keruletenek es terulet‚nek kiszamitasa\t\n");
printf("\t4. Szamologep\t\n");
printf("\tESC Kilepes\t\n");

}

Íme ittvan.a menüt switch -case sel oldaottam meg a ch!=27 aztjelenti,hogy Esc-re kilép.A Menük nevei külön függvényben vannak.Ez egy komplett menü,Ha ezt beírod márcsak hozzáírod a többi alfv-t és kész

A processzor füsttel működik. Ha kimegy belőle a füst, nem működik tovább.

(#2208) CPT.Pirk


CPT.Pirk
Jómunkásember

Ha így kérek be szöveget:

int main(int argc, char **argv)

Akkor hogy lehet hozzá alakítani az strlen függvényt?

strlen:
int strlen(const char *s)
{
int len = 0;
while(*s++) len++;
return len;
}

Meg kellene számolnom a bemenetre érkező betűket az strlen() használata nélkül.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2209) bpx válasza CPT.Pirk (#2208) üzenetére


bpx
őstag

mintha valami lemaradt volna

(#2210) CPT.Pirk válasza bpx (#2209) üzenetére


CPT.Pirk
Jómunkásember

Valami biztos, de honnan? Csak a lényeget copyztam be.

Szóval a standard inputra érkező karaktereket szeretném megszámolni.
Pl. progi.exe asd fgh jklm

Az simán megy, hogy hány argumentumom van, meg azokat ki is tudom íratni, de argumentumot karakterenként kiírni nem tudom, az nem akar sikerülni.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2211) Gyuri16 válasza CPT.Pirk (#2210) üzenetére


Gyuri16
senior tag

remelem ez segit:

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
int i;
for (i=0; i<argc; i++) {
printf("argv[%d] = ",i);
printf("%s\n", argv[i]);
printf("strlen: %d\n", strlen(argv[i]));
printf("betunkent:\n");
int j = 0;
while (argv[i][j++]) {
printf("%c\n", argv[i][j]);
}
// pointeresen:
char * a = *(argv+i);
while (*a++) {
printf("%c\n", *a);
}
}
return 0;
}

Nem vagyok egoista, csak uborkagyalu!

(#2212) bpx válasza CPT.Pirk (#2210) üzenetére


bpx
őstag

a szövegbekérést hiányoltam, de most már látom, hogy a parancssori argumentumokra gondoltál

a problémát még mindig nem teljesen értem, ha már sikerült kiíratni az argumentumokat egyenként, akkor a hossznak is mennie kellene
ha az argv-t próbálod karakterenként kiíratni az nem fog menni (char ** ugye)

ciklussal végigmész az argv-n, azzal minden egyes lépésben egy adott argumentumot vizsgálsz, egy belső ciklussal meg magán az aktuális argumentumon mész végig, pl.

int i, j = 0;
for (i = 0; i < argc; i++)
{
printf("argv[%d] - ", i);
for (j = 0; argv[i][j]; j++)
{
printf("%c", argv[i][j]);
}
printf(", hossz: %d\n", j);
}

szerk: ja persze, én közben telefonáltam is és megelőztek :P

[ Szerkesztve ]

(#2213) CPT.Pirk


CPT.Pirk
Jómunkásember

Köszi srácok! A belső ciklust felejtettem el megcsinálni, így most jó lett:

- a szóközt is számolom, az első szóköz és a lezáró 0 közti karaktereket számolja
#include <stdio.h>
int i, j, len = 0;
int main(int argc, char *argv[]){
for (i = 1; i < argc; i++)
for (j = 0; argv[i][j]; j++)
len++;
len = len + (i-2);
printf("hossz: %d\n", len);
return len;
}

Hogyan lehet az argc, *argv[] -vel bekért karaktereket egy másik függvény számára átadni? Igazából úgy lenne frankó, ha a számolás nem a mainben lenne, bár így sem rossz.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2214) bpx válasza CPT.Pirk (#2213) üzenetére


bpx
őstag

ezzel csak az a gond, hogy pl. a

progi.exe asd fgh jklm
és a
progi.exe asd fgh jklm

is jó, de az argc.,argv mindkét esetben ugyanaz lesz, szóval a szóközöket én nem számolnám

paraméterként meg nyilván úgy lehet, ahogy a main is kapta

(#2215) CPT.Pirk válasza bpx (#2214) üzenetére


CPT.Pirk
Jómunkásember

Hmm, ezen az argc argv-s módon egyáltalán van lehetőség a szóközök számolására? Mert ha csak egy sima stringem van, akkor ott simán meg lehet számolni benne mindent, de így meg nem érkezik szóköz a bemenetre...

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2216) Jester01 válasza CPT.Pirk (#2215) üzenetére


Jester01
veterán

1. A programokat az operációs rendszer indítja, tipikusan másik programok kérésére. A main függvény argv/argc paraméterei a c/c++ nyelv szabványosított formája a program argumentumok kezelésére (mármint nem a nevükre gondolok itt, mert az ugye bármi lehet). Az argumentumokra általában nincs olyan megkötés, hogy nem tartalmazhatnak szóközt. Ha tehát a hívó program beleteszi őket, akkor te meg is fogod kapni. Vagyis csak az a kérdés, hogy a hívó programot hogy veszed rá erre. Windowson a hívó például lehet a parancsablak, a cmd.exe. Ezesetben értelemszerűen idézőjeleket használva valószínűleg jó lesz. Továbbá, ha nem platformfüggetlen kódot írsz, akkor windowson egyben is lekérheted az egész parancssort, a GetCommandLine függvénnyel (bár nem tudom a szóközökkel ezesetben mi lesz).

2. Az argv továbbadása. Az argv nem valami mágikus paraméter, csak egy sima string tömb. Mint ilyen, természetesen akár egészben akár darabokban továbbadhatod másik függvényeknek, pont úgy mint bármilyen más string tömböt. Az argc meg csak egy szerencsétlen int, azzal még ennyi gond sincs.

Jester

(#2217) CPT.Pirk válasza Jester01 (#2216) üzenetére


CPT.Pirk
Jómunkásember

Az a gond, hogy az egyszerű dolgokhoz bevált linuxos gcc-s fordítás nem akar menni nálam, vagyis a lefordított fájlt nem engedi futtatni, hozzáférés megtagadva hibát kapok, aztán emelt hozzáféréssel meg valami ) zárójelet hiányol, de nem a programom hibás, mindegy neki h. mit fordítók le, még egy hello wordnél is ez van, így most kénytelen vagyok win alatt csinálni.
Arra sajnos nem jöttem rá, hogy Linuxon CodeBlocks-al hogyan lehet lefuttatni úgy, hogy kapjon is valami argumentumokat.

Szóval akkor win alatt egyszerűen a cmd szedi ki a fölösnek ítélt spaceket?

Átírtam most külön fgv-be a dolgokat, valamint tettem bele vizsgálatot arra, ha nincs argumentum.

#include <stdio.h>
int i, j, len = 0;

int strLen(int argc, char *argv[]){
for (i = 1; i < argc; i++)
for (j = 0; argv[i][j]; j++)
len++;
if(i==1){
len = 0;
}
else
len = len + (i-2);
printf("hossz: %d\n", len);
return len;
}

int main(int argc, char *argv[]){
strLen(argc, argv);
return 0;
}

warningot nem kaptam, korrekt amit csináltam?

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2218) kirket


kirket
csendes tag

Hali!
Sima C programba szeretnék usb joystick-ot kezelni csak nem tudom hogy lehet, a neten találtam C++-os példákat de sima C-set nem. Pedig gondolom nem lehet nehéz mert a Windowsnak van játékvezérlő kezelő alkalmazása.
Ha valaki tud valamit ajánlani vagy példa kódot adni azt meg köszönném.

(#2219) doc válasza kirket (#2218) üzenetére


doc
nagyúr

ez nem nyelvtol fugg, a platformfuggo dolgokat meg felejtsd el, foleg az elejen
hasznalj pl. SDL-t, ott nagyon egyszeruen tudsz kezelni joyt (is)

(#2220) Jester01 válasza CPT.Pirk (#2217) üzenetére


Jester01
veterán

Ha bővebbet tudnál mutatni a linuxos hibáról akkor abban esetleg tudnánk segíteni.

Ami a kódot illeti: az i,j,len változókat kirakni globálisba nem szép dolog, tedd őket bele az strLen függvényedbe. Az if (i==1) len=0 felesleges mivel ha nem volt argumentum a len úgyis nulla. Az i-t ellenőrizni pedig megtévesztő, hiszen tulajdonképpen az argc-t akarod vizsgálni (persze az értéke ugyanaz lesz, csak logikailag gubancos).

Továbbá szebb lenne, ha a kiírás nem az strLen-ben lenne, hanem a main-ben az strLen visszatérési értéke alapján.

Ha jól értem a logikát, akkor az argumentumok között egy szóközt feltételezve korrigálod a hosszt. Ez ugye addig jó amíg tényleg annyi van. Ha a felhasználó egyetlen argumentummal futtatja akkor nyilván jó eredményt fog adni egyébként.

$ cat >test.c
#include <stdio.h>

int strLen(int argc, char *argv[]) {
int i, j, len = 0;
for (i = 1; i < argc; i++)
for (j = 0; argv[i][j]; j++)
len++;
if (argc > 2) len += argc - 2;
return len;
}

int main(int argc, char *argv[]) {
printf("hossz: %d\n", strLen(argc, argv));
return 0;
}
$ gcc -Wall -O2 test.c
$ ./a.out hello world
hossz: 11
$ ./a.out "hello world"
hossz: 11
$ ./a.out hello world
hossz: 11
$ ./a.out "hello world"
hossz: 13

Jester

(#2221) CPT.Pirk válasza Jester01 (#2220) üzenetére


CPT.Pirk
Jómunkásember

Linux alatt (mint10, Ubuntu alapú) a gcc hiba nélkül megcsinálja az a.out fájlt, csak mikor futtatnám ./a.out, akkor kiírja, hogy hozzáférés megtagadva. Sudo meg sh, stb.-vel futtatva meg azt írja, hogy egy ")" hiányzik, de nem írja honnan. Az biztos, h. nem az én kódomból, mert akármit fordítok le, mindig ezt hiányolja. A 9-es mintel még simán forítottam gcc-vel.

Egyébként igen, 1szóközt feltételez a dolog, ha jól néztem, win alatt a több szóköz is csak egynek számít a cmd-ben.

[ Szerkesztve ]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2222) bpx válasza CPT.Pirk (#2221) üzenetére


bpx
őstag

és van végrehajtási jogod az a.out-ra?
mert ha nincs, akkor ír ilyet, hogy hozzáférés megtagadva (legegyszerűbb esetben)

[ Szerkesztve ]

(#2223) CPT.Pirk válasza bpx (#2222) üzenetére


CPT.Pirk
Jómunkásember

Ha jól emlékszem volt, de adtam neki minden jogot a chmod-dal, és az sem segített. Ráadásul 2 telepített mint 10 van nálam, és mind a kettőn ez a helyzet.

[ Szerkesztve ]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2224) tener


tener
csendes tag

Üdv.

Segítséget kérnék C nyelvű programozásban, elakadtam egy programnál és segítségre volna szükségem! Aki tud segíteni, Neki megköszönném, és akár pénz fejében is honorálnám.
Köszönöm előre is!

(#2225) j0k3r! válasza tener (#2224) üzenetére


j0k3r!
senior tag

hello!

esetleg leirhatnad, hogy milyen program, hol akadtal el, mutathatnal kodot is, mert ez igy szerintem eleg tag.

some men just wanna watch the world burn...

(#2226) tener válasza j0k3r! (#2225) üzenetére


tener
csendes tag

Ez az igazság, hogy még nem mélyültem el teljesen a C programozásban, és lehet nem kéne fórumot szét offolni, hanem privátban (msn,skype stb.) tárgyalni

(#2227) kolyka


kolyka
csendes tag

Sziasztok!

Az a helyzet h nem értek a programozáshoz. Kaptam egy programot, ami elvileg működik és ezt be kell mutassam a tanáromnak. Csakhogy a gond ott kezdődik, hogy el is kell neki magyarázni... Szóval szeretném, hogy valami hozzáértő ember átnézné a progit és irna nekem egy kis leírást róla! A program C nyelven íródott!

Feladat: Írja meg a strlen() függvényt
Tipp: a függvény működéséről itt olvashat. (http://www.gnu.org/software/libc/manual/html_node/Copying-and-Concatenation.html#Copying-and-Concatenation)
Szükséges libc függvények: printf()
A kapott progi: (main.c)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int i=0;
int strlen=0;
for(i=1; i<argc; ++i){
strlen=checkstrlen(*argv++);
printf("karakterekc:%d\n",strlen);
}
return 0;
}

És még egy hozzá: (check.c)

int checkstrlen(char *str){
int charlen=0;

if (!str)
return 0;

while(*str)
*str++;
charlen++;

return charlen;
}

Válom mielőbbi segítségeteket! Előre is köszi

(#2228) CPT.Pirk válasza kolyka (#2227) üzenetére


CPT.Pirk
Jómunkásember

Hmm, milyen ismerős ez a feladat a villany karról. ;]

Az első csak annyit csinál, hogy kiírja, amit a program kapott a standard input bemenetére, szavanként.

A második egy pointerrel dolgozik, de ezeket így egy fájlba kellene tenni, hogy a standard inputra érkező szöveget megszámolja karakterenként. Egyébként nem tudom, hogy a prog1-eseknek kell-e pointerrel dolgozniuk, mintha az a prog2 anyaga lenne, már régen volt. Ilyen megoldást a prog3-ban használtunk stringek nézegetésére.

Egyrészt használd a programkód gombot kód beillesztésekor, másrészt picit olvass vissza pár hozzászólást, ha már az strLen()-t írod.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2229) bpx válasza kolyka (#2227) üzenetére


bpx
őstag

írhatunk róla leírást, de felesleges, mert a program hibás

(#2230) kolyka válasza CPT.Pirk (#2228) üzenetére


kolyka
csendes tag

Igen villanyos vok :-) ebből én nem sokat értettem amit leirtál... :D Az utánad lévő hozzászóló(Zeratul) azt írta h szar a program. Ha te emléxel még erre...nagy kérés volna h írd meg a progit helyesen? mellékelve egy részletes leírással? :D válaszod előre is köszönöm

(#2231) CPT.Pirk válasza kolyka (#2230) üzenetére


CPT.Pirk
Jómunkásember

Figyelj, nem állok neki kommentezni, ezt a progit nem látom át. Pár hsz-el arrébb írtam egy strlen-t, ami nem tökéletes, a több szóközt is egynek számolja, de attól független működik, és érthető.
Azt esetleg kommentezhetem, csak aztán Zamek kérdez egyet keresztbe, és hopp... Ráadásul azt a kódot is egy sorstársadnak írtam, jobbat per pill nem tudok.

Szal azt mondom, ha át akarsz menni a tárgyból, akkor a C könyvet olvasd el, aztán googlere fel, for ciklus, string műveletek, stb.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2232) kolyka válasza CPT.Pirk (#2231) üzenetére


kolyka
csendes tag

oké, köszi szépen a segítségedet! csak azt nem értem h mehetett át vele egy kolega, ha hibás a program! :-)

(#2233) kolyka válasza bpx (#2229) üzenetére


kolyka
csendes tag

szia! elmondanád h mi a gond a programban? mert egy kolega már át ment vele...csak az a baj h én nem értem, ha van időd megköszönném ha írnál leírást! előre is köszi

(#2234) bpx válasza kolyka (#2233) üzenetére


bpx
őstag

2 "apróság":

1. a checkstrlen függvényben a charlen változó növelését is a ciklusba kellene tenni, mert így ha nem üres a string, mindig 1 lesz az eredmény

while(*str)
{
*str++;
charlen++;
}

2. mainben a ciklus nem az igazi
jelenlegi formájában soha nem vizsgálja az utolsó argumentumot
a számolást 1-től kezdi, de a feldolgozást meg a 0. elemtől, így mikor eléri a ciklus végét (argc), akkor még marad 1 feldolgozatlan argumentum

legegyszerűbb pl. a ++ operátort postfix-ről prefixre cserélni (ugye az a különbség, hogy az előbbi csak a kiértékelés után növel, míg utóbbi már előtte)

strlen=checkstrlen(*++argv);

[ Szerkesztve ]

(#2235) Carpigabi


Carpigabi
csendes tag

Hali!
Tudna vlki írni / linkeli egy forráskódot, ami kiszámolja egy n csucsu graf. kromatikus számát?

(#2236) Gyuri16 válasza Carpigabi (#2235) üzenetére


Gyuri16
senior tag

ez altalanosan egy NP-teljes problema. en nem ismerek semmilyen ertelmes algoritmust, es ugy tudom nincs is ilyen, szoval marad kiprobalni az osszes lehetoseget. kesz programom nincs, de megirni nem nagy feladat.. persze lassu lesz, de jobb nincs.

google talal egy par approximalo algoritmust, esetleg azokat is ki lehet probalni, attol fugg mire kell.

Nem vagyok egoista, csak uborkagyalu!

(#2237) Carpigabi válasza Gyuri16 (#2236) üzenetére


Carpigabi
csendes tag

Egy iskolai feladathoz kellene:

Katonai egyenruhakat kellene gyártani, h a haboruban levo orszagok egymast megtudjak különböztetni.

A bemeneti adat:

1.orszag - 2. ország .... ahol 1.orszag szomszédja és ellensége a 2. orszagnak.

eredményben tehát kikell szamitani a minimalis mennyisegű (színű) egyenruhát, amire szükség van ...

Példák:

Britain - Ireland
Szükséges egyenruhák száma: 2

Britain - Ireland
France - Germany
Szükséges egyenruhák száma: 2

Britain - Ireland
France - Germany
France - Swiss
Swiss - Germany
Szükséges egyenruhák száma: 3

(#2238) Gyuri16 válasza Carpigabi (#2237) üzenetére


Gyuri16
senior tag

iskolai feladatot itt helyetted senki nem fogja megcsinalni, viszont segitunk ha elakadsz, es konkret kerdesed van.

a feladathoz:
szetosztod a grafot osszefuggo komponensekre
mindegyiknek kiszamolod a kromatikus szamat es a legnagyobb lesz a megoldas.

kromatikus szam egy osszefuggo grafhoz:
binaris keresessel. egy lepesben kibprobalod eleg e m szin (m legyen mondjuk n/2 az elejen, mivel tudjuk, hogy a kromatikus szam maximum n). ezt bruteforce csinalod.
innen a siker fuggvenyeben mindig kizarod a fel intervallumot, es megtalalod a legkisebb erteket amire meg atmegy a szinezes

Nem vagyok egoista, csak uborkagyalu!

(#2239) Carpigabi


Carpigabi
csendes tag

Nem vártam, hogy megcsináljátok, csak segitseget a kromatikus számokhoz ... :)

szetosztod a grafot osszefuggo komponensekre ... ezt kitudnád fejteni bővebben?

(#2240) Gyuri16 válasza Carpigabi (#2239) üzenetére


Gyuri16
senior tag

ez a pelda:
Britain - Ireland
France - Germany
France - Swiss
Swiss - Germany

ha grafnak megrajzolod ket osszefuggo komponense lesz:
1 Britain - Ireland

2 Swiss - France - Germany
| |
------------------

az elso komponens kromatikus szama 2 a masodiknak 3, ebbol a nagyobb a 3 igy az egesz grafnak is ez lesz a kr. szama.

ez az egesz csak egyszerusites. mivel a fo algoritmus bonyolultsaga exponencialis, ezert jobb, ha minel kisebb grafokon futtatod.

ezen kivul lehet optimalizalni az ismert eseteket is. vannak olyan graf osztalyok amiknek ismert a kromatikus szama. pl:
teljes graf - csucsok szama
csillag graf - 2
korgraf - 2 ha paros szamu csucsa van, 3 ha paratlan

tovabba azok a grafok amiknek 2 a kromatikus szamuk szinten konnyen felismerhetok, mert ezek pontosan a paros grafok (ha tobb mint 1 csucsuk van..)

ha akarsz kicsit gyorsitani az algoritmuson akar ezeket is be lehet vetni, mivel a fenti osztalyokat polinomialis idoben fel lehet ismerni.

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#2241) Carpigabi válasza Gyuri16 (#2240) üzenetére


Carpigabi
csendes tag

kösz, így már érthetőbb... de akkor a következőre h johet ki 2 :

Portugal - Spain
Spain - France
France - Germany
Germany - Czech
Czech - Slovakia
Slovakia - Poland
?

(#2242) Gyuri16 válasza Carpigabi (#2241) üzenetére


Gyuri16
senior tag

ha rendezed, akkor egy osszefuggo grafot kapsz (zarojelben a szinek), innen egyertelmu:

Portugal(1) - Spain(2) - France(1) - Germany(2) - Czech(1) - Slovakia(2) - Poland(1)

Nem vagyok egoista, csak uborkagyalu!

(#2243) Sloane


Sloane
csendes tag

Hello,

Egyszerűen nem jövök rá, mi lehet a hiba... fordítási hiba nincs, csak a futtatásnál nem azt csinálja amit kellene neki...

#include <stdio.h>

main()

{
float osztando, oszto, eredmeny;

printf("Osztandó= "); scanf("%f\n", &osztando);
printf("Osztó= "); scanf("%f\n", &oszto);

if(oszto = 0)
printf("HIBA\n");
else
eredmeny = osztando/oszto;

printf("Eredmény= %f\n", eredmeny);
}

Egy kis segítségre lenne szükségem. :)
thx.

(#2244) Gyuri16 válasza Sloane (#2243) üzenetére


Gyuri16
senior tag

if(oszto == 0)
felteteleknel dupla egyenlosegjelet kell irni, kulonben ertekadasnak lesz ertelmezve

Nem vagyok egoista, csak uborkagyalu!

(#2245) Sloane válasza Gyuri16 (#2244) üzenetére


Sloane
csendes tag

köszi, kijavítottam, viszont a legnagyobb bajom, hogy a prog addig működik jól amíg bekéri az osztandót, utána vár.. az osztót csuszással lehet csak beadni neki, nemértem... onnan kezdvejól számol. nemtudom jól elmagyarázni tudnád esetleg futtatni, megnézni?

(#2246) Gyuri16 válasza Sloane (#2245) üzenetére


Gyuri16
senior tag

gyorsan neztem csak ra, nem vettem eszre a masik hibat. szoval a misztikus scanf..
itt jobban le van irva mint en tudnam:
[link]

roviden: ide nem kell a \n, mert az azt okozza, hogy addig olvas be jeleket stdinrol amig whitespace jeleket kap (az ujsor is az). egy ilyen scanf utan ugyan a \n jel ottmarad a bemeneten, de az itt nem baj, mert a kovetkezo beolvasas is float, ami atugorja ezt. ha chart olvasnal be utana, akkor az mar a \n-t kapna meg. ilyenkor nem art a stdinrol beolvasni mindent az ujsorig.

ajanlom megnezni a faq tobbi ide vonatkozo kerdeset is itt: [link] kulonosen a 12.20asat (miert ne hasznaljunk scanf-et felhasznalotol valo bemenetre)

Nem vagyok egoista, csak uborkagyalu!

(#2247) Sloane válasza Gyuri16 (#2246) üzenetére


Sloane
csendes tag

Nagyon köszönöm, átnézem ezeket, aztán küzdök tovább...muszáj tapasztalatot gyüjteni! :)

(#2248) Geri9159


Geri9159
tag

Sziasztok tudnátok segíteni mert nem jövök rá mi lehet a hiba.
Van egy .txt fájl aminek a tartalma így néz ki:

Kiss Gyula
12a 11 13 12 13 12 13
Nagy Judit
12b 12 11 12 22 13 21

C-be írtam egy programot ami vissza olvassa a fájl tartalmát ami működik csak duplán írja ki a szöveges fájl tartalmát.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100

struct egydiak{
char nev[N];
char osztaly[N];

int szovegszerk;
int prezentacio;
int weblap;
int tablazatkezel;
int adatbaziskezel;

int informatika_ism_konyvtar_internet;

}diakok[N];

FILE *fbe;

int i;
int diakokszam;
char osztbeker;

main(){
fbe=fopen("Informatika_kozepszintu_erettsegi.txt", "r");
if(fbe==NULL){
printf("Hiba a file megnyitasaban\n");
getch();
exit(0);
}else{
while(!feof(fbe)){
fgets(diakok[diakokszam].nev,99,fbe);
fgets(diakok[diakokszam].osztaly,4,fbe);
fscanf(fbe,"%d %d %d %d %d %d",&diakok[diakokszam].szovegszerk,&diakok[diakokszam].prezentacio,&diakok[diakokszam].weblap,&diakok[diakokszam].tablazatkezel,&diakok[diakokszam].adatbaziskezel,&diakok[diakokszam].informatika_ism_konyvtar_internet);

printf("Nev: %s\n",diakok[diakokszam].nev);
printf("Osztaly: %s\n",diakok[diakokszam].osztaly);
printf("Szovegszerkesztes: %d\n",diakok[diakokszam].szovegszerk);
printf("Prezentacio es grafika: %d\n",diakok[diakokszam].prezentacio);
printf("Weblapkészítés: %d\n",diakok[diakokszam].weblap);
printf("Tablazatkezeles: %d\n",diakok[diakokszam].tablazatkezel);
printf("Adatbazis-kezeles: %d\n",diakok[diakokszam].adatbaziskezel);
printf("Informatikai alapismeretek, Konyvtarismeret es internethasznalat: %d\n",diakok[diakokszam].informatika_ism_konyvtar_internet);
}
}

fclose(fbe);
getch();
}

Nem jövök rá hogy miért írja ki duplán. Ha valaki tud segítsen.
Előre is köszönöm :R
Geri9159

[ Szerkesztve ]

(#2249) Gyuri16 válasza Geri9159 (#2248) üzenetére


Gyuri16
senior tag

nem csak duplan irja ki, hanem rosszul. a baj az, hogy a fscanf hivas utan ottmarad a bemeneten egy ujsor karakter, amit a ciklus kovetkezo iteraciojaban a fgets megeszik, es csak azzal ter vissza. innen pedig az egesz eltolodik. en azt ajanlom egesz fajlt soronkent olvasd be, akkor nem lesz ilyen baj. a fscanf-s reszt helyettesitheted pl igy:
char tmp[30];
fgets(tmp, 30, fbe);
sscanf(tmp,"%d %d %d %d %d %d",&diakok[diakokszam].szovegszerk,&diakok[diakokszam].prezentacio,&diakok[diakokszam].weblap,&diakok[diakokszam].tablazatkezel,&diakok[diakokszam].adatbaziskezel,&diakok[diakokszam].informatika_ism_konyvtar_internet);

tovabba a fgets beolvassa az ujsor karaktert is, ezert a nev valtozodban az is ott lesz (feleslegesen) a vegen. ezert van a kimenetedben is egy sorkihagyas a nev alatt. ugyanez igaz az osztaly valtozodra is, de ott mivel limitalod a beolvasast 4 karakterre nem fer bele az ujsor, igy az jol mukodik, ha pontosan 3 karakter lesz a bemenet.

mod: amit fentebb lineltem faq, ott ez is megvan valaszolva: [link]
sok mas gyakori hibara is kiternek benne, erdemes atnezni

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#2250) Geri9159 válasza Gyuri16 (#2249) üzenetére


Geri9159
tag

Ezer köszönet működik rendesen be olvassa. :R :R

Copyright © 2000-2024 PROHARDVER Informatikai Kft.