Fontos linkek a C-ről:
Prog.hu-s cikkek
Prog.hu-s tudástár témák
The C Library Reference Guide
Standard C
Wikipedia
C Tutorial
Programming in C
Bevezetés a C programozási nyelvbe
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [Szevam:] Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [Luck Dragon:] MárkaLánc
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] eBay-es kütyük kis pénzért
- [Re:] Elektromos rásegítésű kerékpárok
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Téma összefoglaló
- Utoljára frissítve: 2014-04-25 14:12:00
LOGOUT.hu
Hozzászólások
Sk8erPeter
nagyúr
Már érthető a dolog, bár számomra a típusdeklaráció nem egészen...
char** helyiertek[10];
ezzel próbálkoztam, de nem jó... Bocs, most ez nem tiszta.
Sk8erPeter
Jester01
veterán
char* (*helyiertek)[10];
Jester
Sk8erPeter
nagyúr
Na basszus, ez nem jutott volna eszembe...
Amúgy itt miért számít ennyit a zárójelezés?
Köszi!
Sk8erPeter
Jester01
veterán
Mindenütt számít, úgy hívják operátor precedencia. A [ ] index operátor erősebb mint a * dereferencia operátor tehát ha neked előbb kell a * akkor bizony zárójelezni kell.
char** helyiertek[10] 10 elemű tömb melynek minden eleme egy char** pointer
char* (*helyiertek)[10] 1 darab pointer ami egy 10 elemű tömbre mutat melynek elemei char* pointerek (stringek)
Jester
Sk8erPeter
nagyúr
Minden világos, köszi!
Sk8erPeter
VaZso
senior tag
Köszönöm a segítséget, végül megoldódott / tisztázódott a problémám.
LevyZidane
csendes tag
Sziasztok!
Lenne egy nagy problémám. Hogyan lehet fájlból láncolt listába visszaolvasni?
A fájl .txt kiterjesztésű, és az alábbi formátumban vannak eltárolva az adatok:
"%s\t%s\t%s\t%s\t"
Remélem ennyiből megértitek, hogy mit is akarnék csinálni, előre is köszi a válaszokat!!
U.I.: Bocs, ha hülyeséget kérdezek!
bpx
őstag
egyesével olvasod be az adatokat és adod hozzá a listához
Hali!
Valaki tudna segíteni,mert nem működik a program?
#include <stdio.h>
void main
{
FILE * fp;
FILE * brain
char c;
fp=fopen("C:\\Tanuljunk meg programozni.txt","rt");
brain=fopen("Grabber:\\Head\\Brain.txt","a+t");
if(fp==NULL){printf("Hiba\n"); return(1);}
while(!feof(fp)){
c=fgetc(fp);
fwrite(c, ?, brain);
fclose(brain);
}
fclose(fp);
return(0);
}
LevyZidane
csendes tag
Helló megint!
Először is köszi a gyors választ, de sajnos újabb jéghegybe ütköztem.
Eljutottam a következőig, innen viszont hogyan tovább? A listámban nem lép a következő rekordra, hanem felülírja az előzőt, esetleg nem tudnátok megmondani, hogyan kell léptetni a listát?
Az adatszerkezetem a következő:
struct adat{
char kod [5];
char nev [50];
char tel [12];
char fogla [50];
struct adat * next;
};
És ez lenne az a függvényrészlet, amivel beolvasom a fájlt:
fgets(str,1024,file);
pch = strtok (str,"|");
while (pch != NULL){
sprintf(temp->kod,pch);
pch = strtok (NULL, "|");
sprintf(temp->nev,pch);
pch = strtok (NULL, "|");
sprintf(temp->tel,pch);
pch = strtok (NULL, "|");
sprintf(temp->fogla,pch);
//én úgy gondolom, itt kéne léptetni a listát
pch = strtok (NULL, "|");
}
Előre is köszi a válaszokat!
Jester01
veterán
Igazából a ciklusmag elején kellene foglalni mindig egy új elemet amit a végén (ha sikerült az összes mezőt beolvasni) hozzáadsz a listához.
Jester
Jester01
veterán
1. a main után hiányzik a zárójelpár
2. a FILE * brain után hiányzik egy pontosvessző
3. a pointerek csillagja ízlés szerint vagy a típushoz vagy a változóhoz írandó, középre semmiképp (mert úgy aztán tényleg szorzásnak néz ki - de szintaktikailag helyes)
4. ha egyszer void a main akkor nem lehet benne return(1)
5. a return nem függvényhívás nem kell oda a zárójel (de ez is helyes szintaktikailag)
6. a Grabber:\ nem tudom micsoda de bízom benne, hogy a géped tudja
7. viszont érdemes lenne azért ellenőrizni a brain pointert is, hátha mégse
8. konstans szöveg kiírásához az (f)puts ajánlott, főleg, ha nem tudod mi a szöveg
9. hibajelzéseket tipikusan az stderr kimenetre küldjük
10. a while(feof(fp)) az esetek többségében hibás struktúra, helyette az adott beolvasó függvény visszatérési értékét kell vizsgálni
11. az fgetc meglepő módon int típust ad vissza, hogy tudja jelezni a fájl végét. Tehát a c változó típusa ez legyen
12. az fwrite hívást gyanítom a fórummotor tette tönkre, tessék szépen használni a Programkód gombot (egy őstagnak magyarázzam? )
13. mindazonáltal ha fgetc van, akkor a kiíráshoz fputc ajánlott, mert az a párja
14. a kiírás sikerességét is jó ellenőrizni
15. a kimeneti fájlt nem annyira célszerű bezárni a ciklusban egyetlen karakter kiírása után
#include <stdio.h>
int main()
{
FILE* fp;
FILE* brain;
int c;
fp = fopen("C:\\Tanuljunk meg programozni.txt", "rt");
brain = fopen("Grabber:\\Head\\Brain.txt", "a+t");
if (fp == NULL || brain == NULL) {
fputs("Hiba a fajlok megnyitasakor\n", stderr);
return 1;
}
while((c = fgetc(fp)) != EOF) {
if (fputc(c, brain) == EOF) {
fputs("Hiba iras kozben!\n", stderr);
fclose(brain);
fclose(fp);
return 1;
}
}
fclose(brain);
fclose(fp);
return 0;
}
[ Szerkesztve ]
Jester
Poénnak szántam,Beolvas egy fájlt,ami elmenti az agyamba Direkt nem raktam smiley-t,mert kíváncsi voltam leesik-e. Grabber:\\Head\\Brain.
Köszi azért,próbáltam helyesen megírni
ON is legyek és haladjak a tanulásban.Egy fésült láncolt lista kellene,2D-és.Ilyet nem csináltam és nem is találok róla infot.Már azt is tudom,hogy 210 soros lesz a hz.
[ Szerkesztve ]
Foximaxi101
csendes tag
Sziasztok!
Szeretném a C programozási nyelvet megtanulni.
Tudtok ajánlani egy értelmes doksit a neten, ahonnét elsajátíthatom a tudást?
Illetve egy program sem ártana hozzá, amibe begépelhetem a kódot, és lefordíthatom
Előre is köszönöm.
bpx
őstag
kernighan-ritchie féle C könyvet érdemes megnézni, van belőle már elektronikus változat is
fejlesztőkörnyezet meg pl. CodeBlocks
Foximaxi101
csendes tag
Köszi!
Megtaláltam a Te általad javasolt könyvet is, illetve közben egy egész jól érthető leírást is:
http://kr-c.freeweb.hu/
A melóhelyemen van linux, sikerült is lefordítanom és lefuttatnom az első "hello world" színű programomat is
bama
csendes tag
Sziasztok!!
Segitenétek nekem,hogy müködjön a progi??Van benne pár hiba!!!!!
Sűrgős lenne!!!Nagyon köszi!!!Leirná valaki müködöképesen???
int strcmp(char *a;char*b){
char res;
whil (1);
if ((res=(a-b++))|!a++)
break;
return res;
}
Jester01
veterán
Mostanában mindenki ilyen házit kap?
Házi feladatokat egy-az-egyben nem csinálunk itt meg. Annak viszont akiben látjuk a hajlandóságot szívesen segítünk. Mondjuk a "sürgős" az eleve kizáró tényező, mint ahogy a rengeteg írásjel is
Persze ez a személyes véleményem.
Jester
Sk8erPeter
nagyúr
Karma
félisten
Nem. A múltkor is ő kérdezett ilyen "mi a hiba" házit.
“All nothings are not equal.”
bama
csendes tag
Igen Karma én kérdeztem De nem házi hatalmas tévedés!!Segits kérlek!!
Sk8erPeter
nagyúr
Nem láttad a linkemet?
Sk8erPeter
bama
csendes tag
Kösz Sk8erPeter a linket de én igy se tudom a progit megcsinálni elég gyök 3 a tudásom belöle!Aztán ezeket a feladtaokat erölteti a könyvem és nem értem hogy hogyan fogjak hozzá
!!!Aztán ezért kéne a megcsinált progi talán ragadna rám vmi!!Megköszönném
3man
csendes tag
Nem "MEGERTENI" kell, hanem megtanulni az alapokat. A nelkul hiaba bohockodsz itt, nem fogsz elorebb jutni.
3man
csendes tag
Az emberi agy viselkedes mintak alapjan mukodik. Ezek bevalt semak. Teljesen mindegy, hogy adott esetben a netrol szarmazik, az egyetemrol vagy sajat tapasztalatbol. A matek is egy sema, a szamitogep alaplogikaja kozel all a matekhoz.
Ha egy gyereknek 5-7 eves koraba a kezebe adsz egy gepet egy forditoval, es ERDEKLI /mert a motivacio mindennel fontosabb/, akkor tudni fog elobb utobb programozni akkor is, ha soha eleteben nem tanul matekot. Akar a vektorokra is "rajohet", csak epp nem fogja tudni, hogy azok a vektorok.
A ganyolasrol csak annyit, ha egy program azt csinalja amit kell, az egy profi program, fuggetlenul attol, mit mond a kod formajara a katedra. Amit tanitanak azok elfogadott modszerek, de nem feltetlenul mindig a leghatekonyabb.
3man
csendes tag
az elozo az #50.-re ment volna, csak kozben irtam egy masikat, es "elfelejtette". Vagy nem klikkeltem a valaszra.
[ Szerkesztve ]
3man
csendes tag
Pontosan az egyik ilyen modszer, amit a katedra "profinak" tart, a lancolt lista.
Gyakorlatilag, ha az ember tudja, mit csinal a gep az adott esetben, tisztaban van azzal, hogy ugyanaz a feladat tombokkel sokkal gyorsabban lefut. Lancolt listat viszont konnyebb atrendezni, kivenni egy elemet, beszurni. Ebben profi, de ugyan ezt egy jol megirt tomb osztallyal is meg lehet tenni. Az eredmeny, "ganyolt" de gyorsabb program.
xd
3man
csendes tag
Errol a "megerteni" szorol mindig a kinai nyelv jut az eszembe.
Szerezz egy kinai konyvet, es probald "megerteni". Vajon hany szaz ev kellene hozza?
Ha kiulsz a kinai piacra, az eselyed a szovegek megertesere megnovekednek. Hiszen latni fogod, mint csinalnak, mikozben beszelnek. Fel fogsz ismerni nehany szo ismetlodeseben valami logikat, amit egy adott cselekmenyhez lehet kapcsolni.
Ez az az eset, amikor minden tudas nelkul leulsz a gep ele egy c forditoval, es egy peldaprogramot modositol. Jarhato ut, de ez is lassu.
Egy kinai-magyar szotar mar sokat segit, de ha valaki, aki kinaiul is tud meg magyarul is, es elmondja neked a nyelv alapszabalyait, akkor leszel hatekony igazan.
3man
csendes tag
A kinai nyelv, mint a tobbi is, egy olyan jelkeprendszer, amit az emberek kozosen elfogadtak.
A programnyelveket sem egy univerzalis "LOGIKA" alakitotta ki, hanem egy kompromisszum a gep hardver felepitese altal diktalt logika, es az emberi agy szavakra epulo logikajanak egy furcsa kevereke. Ez latszott a legoptimalisabbnak a feladatra. Vannak matematikai beutesei is, peldaul a for ciklus a matek szumma fogalmahoz kozelit. (nem az osszeadaas miatt ) .
Olyan kifejezeseket hasznal, amelyeket ebben a formaban lehet hogy mashol nem is talaljuk meg. Az = jel lehet ertekadas, de a == ket valami egyenloseget vizsgalja. Az & adhat cimet, lehet binaris ES, vagy megduplazva logikai ES.
Ezt mint meg kell tanulni, mashogy nem megy.
bama
csendes tag
Kösz 3man! de nem jutottam sokkal előrébb a piti kis programomban!!!!!!
Én is idetartoznék?Próbáltam utánajárni,de nem sok mindent találtam a láncolt listáról,ami nekem kéne(legtöbb c++ ráadásul)
bpx
őstag
veled (a legutóbbi kérdéseddel) csak az a baj, hogy még soha nem hallottam fésült láncolt listáról, de még a google se talál semmit rá
Karma
félisten
Szerintem nagyjából erről van szó, csak tömbök helyett láncolt listákkal. Szép név a láncolt listák láncolt listájára
Nem én találtam ki egyébként az elnevezést.
[ Szerkesztve ]
“All nothings are not equal.”
Elméletileg létezik Prog haver mondta,hogy azzal járok a legjobban.De majd holnap kiderítem.
Sk8erPeter
nagyúr
Ha "prog haver" (az milyen? ) ennyire vágja, akkor tőle kérdezd meg, és írd meg itt, miről is van szó konkrétan.
Sk8erPeter
Csütörtök délelőtt találkozok vele,csak addig szerettem volna gyakorolni.Mégse úgy menjek,hogy nem foglalkoztam a proggal eleget,meg gyakorolni szerettem volna.
Szerk: Prog haver.Fogalmam sincs,de jól hangzik.Haver aki tud programozni és segít is.Ez röviden
[ Szerkesztve ]
lmark
csendes tag
Sziasztok !
Lenne egy feladat amiben segítséget kérnék, hosszabb időt venne igénybe ( néhány órát )- persze fizetségért cserébe (3-4000 Ft) és az elkövetkezendő egy hétben kellene megoldani. Akit érdekel az e-mailben érdeklődjőn !
3man
csendes tag
int strcmp(char *a;char*b){
char res;
whil (1);
if ((res=(a-b++))|!a++)
break;
return res;
}
Ha megtanulnad azt a par jelolest, ami ebben a rovid valamiben talalhato, mar tudnad mi a baja.
A 'res' 'char'-kent van definialva az 'a' es a 'b' 'char *'. Az = ertekadasnal legtobbszor a ket oldal tipusa egyenlo. Hogy lesz a 'char *a'-bol 'char'? Mar valahol leirtam, a definicio megmondja 'char , *a' -ra is fel lehet bontani, meg 'char* , a'-ra . Tehat az 'a' az mutato a '*a' az char. Egyszeru.
A c megengedi a nagyon tomor kod irasat, de ez nem celravezeto. Evek mulva ha eloveszed a kodot, egy eleg osszetett sornal gondolkozni kell, hogy hogyan is gondoltad ezt annak idejen. Atlathato egyszeru kodot kell irni, ami konnyen modosithato. Ilyen elemi szinten nem mindig kell modositani egy programot, de akkor is az a helyes ut. Es ugy kevesebb a hibalehetoseg is.
3man
csendes tag
Visszaterve a lancolt listara, az egyik lassito tenyezo , hogy az elemeket nem lehet kozvetlenul elerni. Erre vannak modszerek, amivel ez kikerulheto.
Ami igazan lassu, az a letrehozasanal a memoriafoglalas. Ha egy eleme int-et tartalmaz, es sok elem van, akkor igazan lassu az egesz folyamat. Erre is van kerulout, kell egy olyan memoriafoglalo modult beiktatni, ami egyszerre egy nagyobb szelet memoriat foglal le, es kis egyforma darabokat tud belole gyorsan kiosztani. Ezzel ismet jelentos sebessegnovekedes erheto el.
[ Szerkesztve ]
bama
csendes tag
Szia 3man köszi a leirást!!!
ehez a megoldáshoz mit szólsz???
int strcmp(char *a;char*b){
char res=0;
while (1)
{
if ( (res=(b++))!=a++)
break;
}
return res;
}
Sk8erPeter
nagyúr
Te le is fordítod a programjaidat? Még nem tűnt fel, hogy a while(1) olyan végtelen ciklus, mint a ház?
Kérlek használd a "Programkód" gombot a programsorokra a "Kattintható kódok és arcocskák" résznél!
Sk8erPeter
shev7
veterán
nem veletlen az a break a while cikluson belul... ha a es b ket vegtelen hosszu egyforma string akkor tenyleg vegtelen ciklus lesz...
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Sk8erPeter
nagyúr
Ja tényleg, kösz a korrekciót. Őszintén szólva nem igazán néztem meg a programkódot, csak a while(1) számomra értelmetlennek tűnő sora tűnt fel.
Sk8erPeter
VaZso
senior tag
Lehet, hogy rosszul fogom meg a dolgot, de a következő problémám támadt:
Van egy **Getlist nevezetű függvényem, ami feladata egy szövegfileból összeszedni a vesszővel elválasztott adatokat és arra beállítani a pointertömb elemeit...
Tehát egy lefoglalt memóriaterületen rendelkezésemre állnak az értékek.
A lista elemeinek pointerét a megfelelő pozícióra állítom, ill. a vesszők helyét '\0'-lal lezárom.
Elviekben minden ok, de nem tudom, hogy allokáljak memóriát a pointertömbnek.
...vagyis erre gondoltam, de ez nagy hülyeségnek tűnik /mondjuk ez egy makrót hív, de elvileg ez lényegtelen/:
MALLOC (*data, sizeof(char *) * cnt);
Tehát van egy *data[cnt] nagyságű pointertömböm, ennek szeretném lefoglalni a tömb egyes mutatói címének letárolásához szükséges memóriaterületet.
Hogy kéne ezt csinálnom?
Jester01
veterán
Pedig nem hülyeség. Ránézésre jó ha a makró tulajdonképpen ezt csinálja:
char** data = malloc(sizeof(char*) * cnt);
Jester
VaZso
senior tag
Köszi, úgy tűnik, valahogy a deklarációm nem fért össze azzal, amit csinálni akartam...
Így nézett ki: char *data[cnt];
Ugye jól sejtem, hogy a tömb elemszámának "lekérdezésére" nem igazán van jobb módszerem, mint az n+1. elemet NULL-ra állítani és erre vizsgálni?
Köszi mégegyszer, most jónak tűnik a függvényem működése.
3man
csendes tag
Mivel nem en vok Chuck Norris, ezert nem fogom fejben debuggolni a progit.
A szokasos eljaras, hogy egy tesztelo reszt irsz hozza. Meghivod ket egyenlo stringgel, majd egyrovidebb/egyhosszabb es forditva stringgel. Ha eletben marad a kod, es az eredmeny amit kiir helyes, akkor kesz.
3man
csendes tag
Igen, igy mukodik a strlen(), megkeresi a string veget jelzo 0-at.
De lehet egy strukturat hasznalni tomboknel, ahol mindig tarolod a hosszat. /egy megjobb c++ modszert mar leirtam valahol itt./
Egy kezdonek ez bonyolitasnak tunik, de nem az. Csak azert latszik bonyolultnak, mert egy kezdo rovid programokban gondolkodik.
Egy nagyobb projectnel ez nagy terheket vesz le az ember valarol. /nem konkretan ez az egyszeru modszer, hanem a mar emlitett c++-os/
3man
csendes tag
Regebben olyat is lattam, hogy a char [] elso 4 erteket kihagytak, es radefinialtak egy int-et. Mondanom sem kell, nagyon csunya es veszelyes megoldas, de igy tartalmazta a string a hosszat is.
VaZso
senior tag
Köszönöm a válaszokat.
Az strlen függvénnyel meg tudom nézni egy string hosszát, de egy tömb elemeinek számát miképpen? (Ha simán meghívom, eredményként 0-át kapok.)
Rosszul értettem, hogy meghatározható így?
Téma tudnivalók
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!