- DIGI Mobil
- MIUI / HyperOS topik
- OnePlus 7 - magabiztos folytatás
- Yettel topik
- iOS alkalmazások
- Realme GT 2 Pro - papírforma
- Új Beats fej- és fülhallgatók jelentek meg
- Futott egy Geekbench kört egy új HTC készülék
- Készülőben a Xiaomi 2021-es csúcsmodelljeinek HyperOS frissítése
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
Hirdetés
-
Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
ph Az ASTRIA 600 ARGB ráadásul a hűtési teljesítmény szempontjából sem szégyenkezhet.
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
Konzolokra is megjelenik a Fera: The Sundered Tribe
gp A kooperatív szörnyvadászós játékhoz a minap egy friss trailert kaptunk.
Új hozzászólás Aktív témák
-
Jester01
veterán
-
Jester01
veterán
válasz Sk8erPeter #1553 üzenetére
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
-
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
válasz LevyZidane #1557 üzenetére
egyesével olvasod be az adatokat és adod hozzá a listához
-
addikt
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
válasz LevyZidane #1560 üzenetére
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
válasz grabber #1559 üzenetére
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
-
addikt
válasz Jester01 #1562 üzenetére
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írniON 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íthatomElőre is köszönöm.
-
bpx
őstag
válasz Foximaxi101 #1564 üzenetére
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
-
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
-
bama
csendes tag
Igen Karma én kérdeztem De nem házi hatalmas tévedés!!Segits kérlek!!
-
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
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
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!!!!!!
-
addikt
válasz Sk8erPeter #1585 üzenetére
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;
} -
shev7
veterán
válasz Sk8erPeter #1591 üzenetére
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!''
-
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? -
VaZso
senior tag
válasz Jester01 #1595 üzenetére
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/
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!