- WLAN, WiFi, vezeték nélküli hálózat
- Nem bírják kiszolgálni az AI energiaigényét
- ASUS routerek
- Leváltaná a Google a sütiket, de ez nem elég
- Az Intel a legmodernebb chipgyártó géppel előzheti meg az egész szektort
- Hálózati / IP kamera
- Mikrotik routerek
- Crypto Trade
- Rendszergazda topic
- Kaspersky Antivirus és Internet Security Fórum
Új hozzászólás Aktív témák
-
dabadab
titán
Mondjuk abszolut nem ertem, hogy a scanf() miert ilyen nagy liebling a C hazikat felado tanarok kozott - csak a nyug van vele, amugy tok felesleges, nem tanit igazan semmilyen koncepciot meg a valos eletben sem hasznalja a kutya sem. Akkor mar inkabb hasznalnak az argc-t meg az argv-t, ha mar valamit.
DRM is theft
-
Karma
félisten
Azért nem kéri be a házszámot, mert a gets az stdin pufferben hagyja az újsor karaktert, amit az enterlenyomás otthagy - így a következő olvasás azt hozza be a felhasználóra várás helyett.
Azt egy külön getcharral el kell nyelned puszta kézzel.
Egyébként a település nevében is lehet ám szóköz.
[ Szerkesztve ]
“All nothings are not equal.”
-
Jester01
veterán
mert a gets az stdin pufferben hagyja az újsor karaktert
Elvileg (és nálam gyakorlatilag) nem hagyja ott. De a scanf meg amúgy is megeszi automatikusan.Egyébként gets-et tilos használni, fővesztés terhe mellett. Helyette fgets ajánlott.
MOD: Konkrétan a település nevét bekérő scanf hagyja a pufferben a sorvéget, így a gets fog üreset adni és a közterület marad ki, nem a házszám.
[ Szerkesztve ]
Jester
-
Karma
félisten
válasz Jester01 #3603 üzenetére
Jogos, félreértelmeztem a leírást, amit a gets-ről olvastam. (Csak annyit írt, hogy nem másolja az újsort a kimeneti stringbe, de arról nem szólt, hogy eldobja-e. A szabvány viszont írja.) Nem sűrűn szoktam ilyet használni
Azért az ilyen fővesztéses kikiáltás mellé szerintem elfér, hogy azért tilos, mert 1) nincs túlcsordulás elleni védelem benne és ezért baromira veszélyes és 2) most már deprekálta a szabvány. Hátha jobban rögzül.
[ Szerkesztve ]
“All nothings are not equal.”
-
e=mc²
őstag
Bocs, hogy ilyet kerdezek, de hogy kell "elnyelni puszta kezzel"?
Most fgets-el probalkoztam, de az eredmeny...
Igazabol szerintem scanf-el kellene valahogy megoldani, mert a tobbi beolvaso fuggvenyt eddig nem hasznaltuk es megemlitve sem voltak...
Az a baj, hogy ertem en a logikajat, de megoldani mar sajna nem mindig megy...
Ambulimax Provider
-
-
e=mc²
őstag
Feltettem, 1 napig marad itt fenn...
A scanf-el ami kommentezve van, ott mukodik rendesen, ha nincs szokoz az utcanevben. Es ugye azt kene megoldani, hogy lehessen benne. Pl legyen jo beiraskor az hogy:
- Petofi utca
- Petofi Sandor utca
stbstb..A segitseget pedig koszonom!
[ Szerkesztve ]
Ambulimax Provider
-
Jester01
veterán
A scanf("%s") ugyanúgy nem ellenőrzi a hosszt, tehát túlcsordulás veszélyes.
Hogy a program miért nem működik azt már a #3603-ban leírtam. A scanf hagyja a pufferben a sorvéget ezért a rákövetkező fgets üres sort lát. A mostani kóddal ezért a település neve lesz üres.
Az ember azt hinné az adatbevitel egyszerű, de ez sajnos nem így van
Mivel mindenhol sorokat akarsz olvasni, mindenhol fgets kell és máris jó lesz. Persze igazából egy hibakezelős verzió kellene, ami észreveszi, ha több betűt ír be a lökött felhasználó.
Például valami ilyesmi jöhet szóba.
Jester
-
e=mc²
őstag
válasz Jester01 #3609 üzenetére
Koszonom szepen, kezdem kapizsgalni!
Megirtam a sajat bekero fuggvenyem, viszont ha minden sort fgets-el kerek be a rendszamhosszt is eggyel meg kellett novelni. Es igy mar mukodik rendesen.
Igaz nem hulyebiztos (tehat ha direkt irnak rosszul bele persze hibas lesz), de nem is ez a cel jelenleg.
Ambulimax Provider
-
chabeee
tag
Sziasztok
Tudna-e valaki egy forráskódot adni ami egy kétirányban láncolt fejes, cirkulált listát valósít meg, amiben lehet új elemet felvenni és törölni. Megértés és tanulás érdekében kellene. Ha magyarázatot is tudtok adni hozzá, az lenne a legjobb számomra, de az nem feltétlenül szükséges. Előre is köszönöm!
Üdv. Csabi.[ Szerkesztve ]
-
Lacces
őstag
válasz chabeee #3611 üzenetére
Angol weboldalon a teljeség igénye nélkül a forráskód C-ben a duplán láncolt listához.
Angol, ha nem tudod, akkor fordítsd le magadnak, bőven jó. Ha nem megy, akkor rajzolád le.
Vagy a könyvtár és a Számítógép programozás című könyveket tanulmányozd ezügyben, vagy egy másik magyar nyelvű könyvet, viccen kívül
Ha meg megy az angol, akkor mehet a google keresés linked list animation. És láss csodát mint itt (csak várni kell az animácóra ) -
Davs
tag
Hali!
Dinamikusan szeretnek a realloc() segitsegevel egy 2D-s double ** tombot csinalni. Az alabbi kod "mtx == NULL"-al kilep (amugy segfaultol).
http://pastebin.com/RSg2dexP
a generatematrix funkciomban lesz szerintem valami baj, de egyszeruen nem latom. Tudnatok ravetni egy pillantast? -
Karma
félisten
Hát egy probléma biztosan van már a main függvényedben és a szignatúrákban: a double**-ot ha függvényben hozol létre, double***-ként kéne a Matrix címét átadni. Ugyanis a jelenlegi formájában NULL marad végig.
Most nem vagyok C fordító közelben, de nem néznéd meg debuggerrel melyik sor száll el? A watch funkció haar rávilágíthat.
BTW nekem a *** kezd bűzleni, nem kéne máshogy megoldanod a kétdimentiós tömböt?
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
Huh, még egy súlyos baj. A realloc, hasonlóan a mallochoz, nem inicializálja a lefoglalt területet, azaz amikor a belső listákat próbálod reallocolni, az mtx[i]-ben zaj van -> instant fail.
Egyáltalán mi a kénkőért használsz reallocot?
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
-
chabeee
tag
hello,
3 feladatot nem tudok megoldani cirkuláris láncolt listákkal, valaki tudna ebben segíteni?- a lista elemeinek listázása visszafelé;
- elem felvitele a lista elejére
- elem felvitele rendezetten (a lista legyen kulcs szerint növekvő sorrendben).
Megjegyzés: a program a felvitelt csak egyféleképpen engedje meg. Ha az első felvitel rendezett módon történik, akkor ne lehessen később már a lista elejére vagy végére felfűzni. És fordítva, ha az első felvitel nem rendezetten történik, akkor ezt a funkciót később már ne lehessen kiválasztani.main.c
előre is köszönöm
üdv csabi. -
Lacces
őstag
válasz chabeee #3618 üzenetére
Biztos cirkulált listánál akarsz beszúrni az elejére végére?
Lehet én vagyok a buta most, de a cirkulált lista, az egy olyan lista, amelynek nincs eleje se vége... mert körbe láncoltak az elemek... "utolsó" elem az "első" elemre hivatkozik, mint egy népi körtánc... én legalábbis mindig azt hittem ez a cikrulált lista.
-
Lacces
őstag
válasz chabeee #3626 üzenetére
http://thecodecracker.com/c-programming/circular-linked-list/. Vasárnap igazán utána nézhettél volna... Keres rá neten: "circular linked list"
kispx: Mikor érdemes amúgy cirkulált listát használni?
[ Szerkesztve ]
-
chabeee
tag
hello agian,
a printback-nél mit rontok el? egyszerüen nem akarja kiírni pedig sztem hiba nincs benne, lessétek meg please:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
int nev;
struct Node *next;
struct Node *prev;
} node;
void insert_after(node *nodee, int data, int nev){
node *start = nodee;
while(nodee->next != start) {
nodee = nodee->next;
}
nodee->next = (node*)malloc(sizeof(node));
nodee->prev = nodee;
nodee = nodee->next;
nodee->data = data;
nodee->nev = nev;
nodee->next = start;
}
void insert_before(node *nodee, int data, int nev){
node *newNode = (node *) malloc(sizeof(node));
newNode->data = data;
newNode->nev = nev;
newNode->next = nodee->next;
newNode->prev = nodee;
nodee->next = newNode;
(nodee->next)->prev = newNode;
}
int find(node *nodee, int key){
node *start = nodee;
nodee = nodee->next;
while(nodee != start) {
if(nodee->data == key) {
return 1; //Element Found!
}
nodee = nodee->next;
}
//Element Not Found!
return 0;
}
void delete(node *nodee,int data){
node *start = nodee;
while(nodee->next != start && (nodee->next)->data != data) {
nodee = nodee->next;
}
if(nodee->next == start) {
printf("Element %d is not presented in the list \n", data);
return;
}
node *temp;
temp = nodee->next;
nodee->next = temp->next;
free(temp);
return;
}
void print(node* start, node* nodee){
if(nodee == start) {
return;
}
printf("%d %d ", nodee->data, nodee->nev);
print(start,nodee->next);
}
void printBack(node* start, node* nodee){
if(nodee == start) {
return;
}
print(start,nodee->prev);
printf("%d %d ", nodee->data, nodee->nev);
}
int main() {
int query;
node *start = (node*)malloc(sizeof(node));
start->next = start;
start->prev = start;
printf("1 - Insert_after\n");
printf("2 - Insert_before\n");
printf("3 - Delete\n");
printf("4 - Print\n");
printf("5 - Print Back\n");
printf("6 - Find\n");
while(1) {
printf("query: ");
scanf("%d", &query);
//insert_to_the_end
if(query == 1) {
int data;
int nev;
scanf("%d", &data);
scanf("%d", &nev);
insert_after(start, data,nev);
}
//insert_to_the_begginning
if(query == 2) {
int data;
int nev;
scanf("%d", &data);
scanf("%d", &nev);
insert_before(start, data,nev);
}
//delete
else if(query == 3) {
int data;
scanf("%d", &data);
delete(start, data);
}
//print
else if(query == 4) {
printf("The list is: ");
print(start,start->next);
printf("\n");
}
//printback
else if(query == 5) {
printf("The list is: ");
printBack(start,start->prev);
printf("\n");
}
//find
else if(query == 6) {
int data;
scanf("%d",&data);
int status = find(start,data);
if(status) {
printf("Elements Found\n");
} else {
printf("Elements Not Found\n");
}
}
}
return 0;
} -
kingabo
őstag
válasz chabeee #3631 üzenetére
Rosszul állítod be a visszafelé mutató pointert az insert_after-ben. Először át kéne menni az új elemre és annak állítani a prevjét. Jelenleg minden prev saját magára mutat.
nodee->next = (node*)malloc(sizeof(node));
nodee->prev = nodee;
nodee = nodee->next;
nodee->data = data;...
helyettnodee->next = (node*)malloc(sizeof(node));
nodee = nodee->next;
nodee->prev = nodee;
nodee->data = data;szerk: lehet vhogy kiemlést is betenni a kódba? Nekem nem jött össze.
szerk #2: a nodee-n kívül az előtte és az utána jövőnek is karban kéne tartani a pointereit. (sztem célszerű lerajzolni, hogy mit hogy kell átkötni )[ Szerkesztve ]
-
eriktoth
tag
Üdv! az alábbi módszerrel sikeresen megtalálom egy tömb első két legnagyobb elemét, olyan kérdésem lenne, hogy ezt hogyan lehetne több elemel megcsinálni, mondjuk 10-20 vagy akár 50 elemű tömbbel, hogy maximumtól folyamatosan írja az értékeket:
if(Counter[0]<Counter[1]){
max1=Counter[1];
max2=Counter[0];
}else{
max1=Counter[0];
max2=Counter[1];
}
for(i=0;i<50;i++) {
if(max1<Counter[i]) {
max2=max1;
max1=Counter[i];
}
else if(max2<Counter[i]) {
max2=Counter[i];
}
}
printf("%d %d\n",max1,max2); -
Frenky89
őstag
Sziasztok!
Hogyan tudnék platformfüggetlenül létrehozni egy 64 bit hosszú változót/területet, amire egyben tudnék alkalmazni <<, &, | műveleteket?
-
eriktoth
tag
Üdv!
Van a kód:
for(............){
printf("kiir valami %d kiir mas valami %d\n",n,tomb[i]);
}A kérdés pedig, hogy lehetséges-e valahogy megjelölni, hogy melyik elemet írtam már ki, és mondjuk egy másik ciklusban, asztat már ne írja ki?
-
eriktoth
tag
Igen, általános egyes léptetés és mondjuk,hogy kiírta a tömb[5]-et akkor azt már ne írj ki, de lehet rossz a gondolat menetem
-
Karma
félisten
válasz Frenky89 #3647 üzenetére
stdint.h-ból az int64_t nem segít? A stackoverflow alapján erre való. Mindenesetre jó hogy említed, milyen fordító a cél
[ Szerkesztve ]
“All nothings are not equal.”
Ú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!
- ThinkPad (NEM IdeaPad)
- Anglia - élmények, tapasztalatok
- Call of Duty: Modern Warfare III (2023)
- A fociról könnyedén, egy baráti társaságban
- Napelem
- Villanyszerelés
- Milyen videókártyát?
- WLAN, WiFi, vezeték nélküli hálózat
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Huawei P40 lite - kényszerpályán
- További aktív témák...
- iPad Air 10.9" - 2022, M1, Apple garancia, doboz, kék
- iPad Air 10.9" - 2022, M1, nanoSIM, Apple garancia, doboz, szürke
- Macbook Pro 16" - i9 és i7, 32/512GB, 4GB Radeon, touchbar, garancia, szürke
- Macbook Pro 15" - 2018, 6 mag i7, 16/256 GB, 4GB Radeon, 83 ciklus, garancia, ezüst (02)
- Macbook Pro 15" - 2017, 4 mag i7, 16/256 GB, 4GB Radeon, 99%, garancia, doboz, szürke