- Autóhifi
- Dobozos verziót kapnak az IGP nélküli AMD Ryzenek
- Nvidia GPU-k jövője - amit tudni vélünk
- 8 kHz-es, jobbkezes PnP egér közeledik a Cherry Xtrfy logójával
- Bemutatta első táblagépét saját neve alatt a HMD
- Megérkezett a Corsair új M.2-es SSD-je, és mindennek mondható, csak lassúnak nem
- iPad topik
- Amazon Kindle
- Érkezik a Crucial LPCAMM2 memóriamodulja
- HiFi műszaki szemmel - sztereó hangrendszerek
Hirdetés
-
A streamingszolgáltatások összecsomagolása lehet a következő divat
it Ezúttal a Comcast kínálná egyben a Peacock, Netflix és Apple TV+ streamingszolgáltatásokat.
-
Íme az Assassin's Creed Shadows első előzetese
gp A teljes játék novemberben érkezik, az előrendelések már elindultak.
-
Dimensity 8250-ként hasznosítja újra a Dimensity 8200-at a MediaTek
ma Ugyanúgy 4 nanométeren készül, a specifikációs lista pedig nem mutat sok változást az új és az előd között.
Új hozzászólás Aktív témák
-
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 ]
-
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.
-
VaZso
senior tag
válasz Jester01 #1601 üzenetére
Értem, ill. jól gondoltam...
Azért nem tudom előre a hosszát, mert egy fileból olvasom ki az értékeket.Annak sem lenne sok értelme, ha globális szinten tárolnám egy változóba, mert listák közül is lehet akármennyi.
Ez lett belőle:
int ptLen(char **data) {
if (!data)
return 0;
int i=0;
while (data[++i])
;
return i-1;
} -
Dead_slow
tag
válasz Jester01 #1627 üzenetére
Köszönöm, ezzel a kiegészítéssel a listaz függvény végére már tökéletesen működik:
int k;
for(k=0;k<(*lt).db;k++){
if(max==(*lt).telkek[k].kulonb){
printf("legtorzabb tel(k)ek:\nHelyrajziszam:%s\nTulajdononsa:%s\n Szelessege:%d\n Hosszusaga:%d\n ",(*lt).telkek[k].hely,(*lt).telkek[k].nev,(*lt).telkek[k].hossz,(*lt).telkek[k].szeles);
} -
Gyuri16
senior tag
válasz Jester01 #1678 üzenetére
koszonom, igy mar ertheto.
kozben tovabb olvasva talaltam meg egy erdekeset:
program elejen van egy ilyen:
signal(SIGCHLD, SIG_IGN);
(ha jol tudom ez a default beallitas..)aztan kesobb ez:
int pid = fork();
if (!pid) {
/* ... */
exit(1);
}
/*
* Yeah, we set CSIGCHLD to SIG_IGN, so this should
* never even succeed reliably anyway, but at least
* we'll wait for the child to exit, and not have
* potentially lots of children outstanding.
*/
if (pid > 0) {
int status;
waitpid(pid, &status, 0);
}itt ismet a kommentar amit nem ertek.
azt tudom, hogy ha fork()-kal egy uj processzt letrehozunk, akkor az addig el (zombikent) amig a szulo (vagy ha mar az nincs akkor az init) meg nem hivja a wait()-et. ez itt megtortenik, nem ertem mi a gond a szerzo szerintmod: miert lettem en is OFF? en nem akartam
[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Jester01 #1681 üzenetére
koszonom, ertem.
igy viszont nem igazan vilagos mire is volt jo az, hogy beallitotta SIG_IGN-ra az elejen, hiszen ez a default ertek, es ha jol ertem akkor ezzel csak azt erte el, hogy a waitpid() az osszes gyerekre var (viszont itt mindig csak egy lesz egyszerre). tehat ha az elejen nem teszi oda a SIG_IGN-t, es a fork() utan tesz egy wait()-et, akkor nem ugyanez az eredmeny?
a program ezen kivul nem hoz letre processzeket (kiveve, hogy a foprogram demonkent fut)mindenesetre majd holnap kiprobalom, hogy is mukodik ez
Nem vagyok egoista, csak uborkagyalu!
-
Retekegér
HARDVERAPRÓD
válasz Jester01 #1777 üzenetére
Itt a teljes feladat:
#include <stdio.h>
#include <stdlib.h>
#define NELEM 1000
main()
{
double *pd, sv;
int i , j, lepes;
/* Helyfoglalás ellenőrzéssel */
pd = (double *) calloc( NELEM, sizeof(double));
if (! pd) {
printf("\a\nNincs elég memória!\n");
return -1; /* Hiba történt */
}
/* A tömb feltöltése véletlen számokkal */
for (i = 0; i < NELEM; i++)
*(pd + i) = random(10000)*12.34;
/* Shell - rendezés */
for (lepes = NELEM/2; lepes >0; lepes /=2)
for (i = lepes; i < NELEM; i++)
for (j=i-lepes; j>=0 && pd[j]>pd[j+lepes]; j-=lepes)
{
sv = pd[j];
pd[j] = pd[j+lepes];
pd[j+lepes]= sv;
}
/* A lefoglalt terület felszabadítása */
free(pd);
return 0; /* Hibátlan volt a program futása */
}<< Heimdal >>
-
Sk8erPeter
nagyúr
válasz Jester01 #1885 üzenetére
No de ezt miért nekem mondod?
Én mondjuk ilyen szinten meg se néztem, mert kb. 1 perc nézegetés után feladtam, annyira rosszul volt indentálva. Igaz, az utána lévő eredmény is elég fos, mert igazad van, totális keverék az egész, azokkal a hibákkal, amiket leírtál.
Még ettől a getch-tól van hányingerem.Sk8erPeter
-
brsd
csendes tag
válasz Jester01 #2096 üzenetére
Nem működik így sem:
#include <stdio.h>
int main(void)
{
printf("Hello world!\n");
return 0;
}Ezt írja, ki, ha a "Run"-ra kattintok: "It seems that this file has not been built yet. Do you want to build it now ?" ha a "nem"-re kattintok, akkor jön be a fekete ablak, a fent leírt üzenettel.
-
-
CPT.Pirk
Jómunkásember
válasz Jester01 #2216 üzenetére
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)
-
CPT.Pirk
Jómunkásember
válasz Jester01 #2220 üzenetére
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)
-
#90999040
törölt tag
válasz Jester01 #2496 üzenetére
Szerintem ez a feltétel megfordításával sem lesz jó.
1. Keveri az osztandót és az osztót.
2. Miért kell ehhez 3 ciklus, mikor 2 bőven elég?
A külső ciklus az osztandót növeli, a belső pedig az adott osztandó mellett az osztót.Ha mindenképpen do-while, akkor én így csinálnám:
int main() {
int n, oszto, osztando, prim;
printf("Melyik szamig nezzem meg?");
scanf("%d", &n);
for (osztando=2; osztando<=n; osztando++) {
prim=0;
oszto=1;
do {
if (osztando % oszto == 0) {prim++;}
oszto++;
} while ((prim<=2) && (oszto<=osztando));
if (prim==2) printf("%d\n", osztando);
}
return 0;
}Egyébként pedig így:
int main()
{
int osztando,oszto,k,hatar;
printf("Melyik szamig nezzem meg? ");
scanf("%d",&hatar);
for (osztando = 2;osztando <= hatar; osztando++) {
k=0;
for (oszto = 1; oszto <= osztando; oszto++) {
if (osztando % oszto == 0) {k++;}
if (k > 2) {break;}
}
if (k==2) {printf("%d\n",osztando);}
}
return 0;
} -
#90999040
törölt tag
válasz Jester01 #2498 üzenetére
Hát nem tudom..... Én akárhogy nézem, ez szerintem csak akkor működik, ha a do-while ciklust teljes egészében kiveszi(persze ezen belül a for-nak meg kell maradnia), vagy a while-ben olyan feltételt ad meg, ami állandóan "FALSE"-t ad. pl.: (1==2). És szerintem a "vege" valtozó is felesleges.
Vagy én tévednék? -
dabadab
titán
válasz Jester01 #2509 üzenetére
"Mivel semmi garancia nincs cast esetén, ezért ez semmivel sem jobb mintha az argumentum típusa egyszerűen void* lenne"
De, annyival azért jobb, hogy a függvény deklarációjából látszik, hogy ott valamiféle sockaddr struktúrát vár: ne felejtsd el, hogy a kódot nem csak a fordítóprogram, hanem a programozó is olvassa
DRM is theft
-
Jester01
veterán
válasz Jester01 #2524 üzenetére
További vizsgálódás után még az alábbi dolgokat figyeltem meg:
1) a főprogram még azelőtt törli az üzenetsort, mielőtt a gyerkőcöknek lenne esélyük kiolvasni az üzenetet. Mivel az msgrcv hívások sikerességét nem ellenőrzöd ezt nem veszed észre. Lásd még: feladatkiírás 10. pontja.
2a) a főprogram már akkor beteszi a következő üzenetet mielőtt az előző feldolgozása megtörtént volna.
2b) az előző pont miatt az első gyerek például rögvest megcsinálhat több feldolgozást is, ezért a kimenetben összekeverednek az eredmények. Erre azonban semmi megkötés nincs a feladatkiírásban szóval szerintem ez nem baj.
3) ugyanabba fájlba párhuzamosan szeretnének írni, emiatt vesznek el adatok. A fájlt hozzáfűzésre (append) kell megnyitni akkor jó leszJester
-
j0k3r!
senior tag
válasz Jester01 #2525 üzenetére
hello!
1. koszonom szepen a tanacsokat, megprobaltam kijavitani a leirtak alapjan.
erre jutottam: c, sh, kimenet2. uzenetsor torlese ele beraktam egy sleep(1);-et (ez valoszinuleg ganyolas). mivel lehetne legegyszerubben leellenorizni, hogy mar elment az n * m db uzenet, ami utan mehet a torles? (en arra gondoltam, hogy letrehozok a foprogramban egy int valtozot (shmat es tarsai, hogy elerjek a gyerekprocessek is), amit novelek minden egyes sikeres uzenetkules utan, de hatha van egyszerubb megoldas is)
3. mivel 'vizsgalodtal', hogy ezekre problemakra rajottel?
some men just wanna watch the world burn...
-
j0k3r!
senior tag
válasz Jester01 #2527 üzenetére
1. a kimenet meg mindig jo
2. mostmar igen, de sajnos meg mindig van benne sleep() (kod), pedig szerintem logikailag mar jo lenne (ha kiveszem a sleepet, akkor hamarabb zarja le, minthogy megerkezne az utolso uzenet, pedig a ciklusban az utolsoprocess vizsgalat es a szulonek valo uzenet kuldese a 'sima' uzenetkuldes utan van)
3. : )[ Szerkesztve ]
some men just wanna watch the world burn...
-
j0k3r!
senior tag
válasz Jester01 #2529 üzenetére
elszamoltam magam, azthittem kulon kell az utolso processeknek kuldeni egy-egy uzenetet a szulonek, de mar latom, hogy az utolso gyerekprocess (i + 2) -es tipusu uzenete az pont (n + 1), szoval valo igaz ketszer kuldtem el szulonek, nemcsoda hogy ido elott torolt sleep nelkul.
koszonom szepen a segitseget, mostmar sleep nelkul is mukodik es szepen torli is az uzenetsort (ipcs szerint is)some men just wanna watch the world burn...
-
followme
tag
-
-
followme
tag
válasz Jester01 #2541 üzenetére
Bocsi, nem olvastam az elejét, csak átfutottam és megláttam amit írtál és az ütött szemet.
Igazad van, gyakorlatilag mindent lehet ilyen szempontból máshogy csinálni.
De akkor még egy példa arra, hogy miért kerüljük az implicit típuskonverziót:
uint16_t u16a = 40000;
uint16_t u16b = 30000;
uint32_t u32res;
u32res = u16a + u16b;
/* 70000 vagy 4464? */Ha van rá igény mutatok olyan példát, amikor másra is használható a castolás. Nagyon szépen lehet vele például OO szerű C kódot írni
Csak nem szeretném, hogy a fórumozók idegenkedjenek tőle
[ Szerkesztve ]
Whatever you do will be insignificant, but it is very important that you do it.
-
CPT.Pirk
Jómunkásember
válasz Jester01 #2588 üzenetére
No alakítottam rajta egy kicsit.
char *strChomp(char *buffer)
{
if (buffer && *buffer) {
while (*buffer != '\0') {
if (*buffer == '\n') {
if (*buffer++ == '\0') {
*buffer = '\0';
return buffer;
}
}
buffer++;
}
return buffer;
}
return NULL;
}Így most elvileg végigmegy a sztringen karakterenként a lezáró nulláig. Közben ha talál \n-et, akkor megnézi, hogy a rá következő karakter lezáró 0-e.
Egyébként van valami ordító hibám? Mert eddig csak és kizárólag segfaultot kaptam az assert teszteknél.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
CPT.Pirk
Jómunkásember
válasz Jester01 #2590 üzenetére
Kezdem felfogni.
if (buffer && *buffer) {
while (*buffer != '\0') {
if (*buffer-- == '\n') {
*buffer = '\0';
}
buffer++;
}
return buffer;
}
return NULL;Viszont azt nem tudom, hogy ez a felülírás amit mondtál, ez mit csinál. Mivel ha felülírjuk, akkor mindenképpen 2 darab \0 lesz a stringben. Ilyenkor magától levágódik a második \0?
Valamint hogy van ez a visszatérési érték helyreállítása?
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
CPT.Pirk
Jómunkásember
válasz Jester01 #2592 üzenetére
Uhh tényleg.
char *strChomp(char *buffer)
{
if (buffer && *buffer) {
while (*buffer != '\0') {
buffer++;
}
if (*buffer-- == '\n'){
*buffer = '\0';
}
return buffer;
}
return NULL;
}Most ha minden igaz, elmegy a végére, ha odaért, megnézi a lezáró nulla előtti karaktert, és ha az \n, akkor átírja \0-ra.
Nekem csak vissza kell adni a módosított, vagy az eredeti stringet, ha nem volt \n a végén. Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba? Ez most elég amatőr kérdés lesz, de gondolom nem egy "ellenkező irányú" while ciklussal lépdeljek vissza.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
Ú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!
- Kingston Hyper X genesis kit 2x 4GB 1600MHz dual channal DDR3 RAM fém
- i3-as internetezős, multimédia pc hivatalos WIN10-el (+egér+bill)
- Ingyen foxpost! 8 év alza gari! SFX-L Seasonic Focus SGX 650W táp, felárért ház+venti+hűtő is
- DJI Osmo akciókamerához - Új akkumulátor töltő eladó!
- Eizo Coloredge CS2730 - eredeti Japán, 27" fotó-monitor eladó!
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen