Hirdetés
- Parci: Milyen mosógépet vegyek?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- GoodSpeed: Miért úszta meg Albert Speer? (Reagálás a Telex cikkére)
- Luck Dragon: Asszociációs játék. :)
- sidi: 386-os Chicony gázplazma laptop memóriabővítése
- sziku69: Fűzzük össze a szavakat :)
- Magga: PLEX: multimédia az egész lakásban
- sziku69: Szólánc.
- Pitterix: Gyógytorna
- GoodSpeed: Kell-e manapság egérpad vagy sem?
Új hozzászólás Aktív témák
-
PumpkinSeed
addikt
Kezdőként értelmetlen kérdésem: Ha nem scanf-el végezzük a bekérést akkor mivel?

Meg adott egy számkitalálós játék. Bekérésnél scanf ("%d";&a);
Olyan problémám lenne, hogy ha betűt adok meg és nem számot akkor bebuggol a program és végtelen ciklussá változik. Nincs valami egyszerű de hatékony megoldás erre. Azt hallottam, hogy be kell olvasni tömbként és ki kell vonni az ASCI kódból tömbben ki olvasott értékkel kell valamit szugerálni. Na nekem ennél egyszerűbbre lenne szükségem.

-
Karma
félisten
válasz
Bobrooney
#3697
üzenetére
A scanfnek három nagy problémája van kapásból:
1) Ha extra paraméterek nélkül használod a %s-t, azaz ahogy órán bemutatják, nem ellenőrzi a célpuffer méretét, így buffer overflowt okoz egy hosszabb bemenet. (Ezt a gets is tudja.)
2) Ha túl nagy integer számot akarsz beolvasni, tehát túlcsordulás keletkezik, akkor nem definiált a viselkedése. Márpedig milyen módon akadályozod meg a felhasználót, hogy túl sok számjegyet nyomjon? De a probléma fájlolvasásnál is áll.
3) Ha nem sikerült értelmezni valamit, a bemeneti stream állapota kiszámíthatatlan.(Ezt egyébként Google-lel találtam. Hasznos.)
-
Karma
félisten
válasz
Bobrooney
#3695
üzenetére
A scanf érthető, mivel nagyon veszélyes, de hogy a switch miért fáj, illetve hogy miért tekinti jobb megoldásnak az ifek tengerét? Rejtély számomra. Főleg, hogy egyenértékűek*. Lehet ezért tanár?
* egész számok vagy annak megfeleltethető értékek esetén.
(Élesben meg persze ott a State és a Command tervezési minta.)
-
Bobrooney
senior tag
válasz
PumpkinSeed
#3693
üzenetére
Nem tudom, nem is érdekel. Csak már annyiszor javasoltátok itt a switch-t, de néha nem engedik alkalmazni. scanf is tilos nálunk... Persze ez a vizsgalapra nincs feltüntetve

-
válasz
PumpkinSeed
#3693
üzenetére
Gondolom, mert nem tudja hibátlanul megírni

-
Karma
félisten
válasz
PumpkinSeed
#3688
üzenetére
Miért, a switch szerinted mégis micsoda?

-
Bobrooney
senior tag
válasz
PumpkinSeed
#3684
üzenetére
printf ("The solution: %d\n",&c); A kiírásodban a c változó memória címét iratod ki!
Módosítsd:
printf ("The solution: %d\n",c);
és jó lesz !
Valamint az ismétlődő kiíratást érdemes lehet kivinned csak az utolsó else if mögé
else if (op == '/')
{
c=a/b;
}
printf ("The solution: %d\n",c);
formában. -
PumpkinSeed
addikt
Az alábbi program egy számológép:
De az a baj, hogy minden számítsára 2686780-at ad.

#include <stdio.h>
#include <conio.h>
#include <math.h>int main()
{
int a,b,c;
char op;
printf ("This is a calculator.\n");
printf ("Give me 2 number(a,b):");
scanf ("%d,%d",&a,&b);
printf ("This is ur numbers: %d,%d \n",a,b);
printf ("Now U can tell me what do u want to do.(+,-,*,/):\n");
fflush(stdin);
scanf ("%c",&op);
if (op == '+')
{
c=a+b;
printf ("The solution: %d\n",&c);
}
else if (op == '-')
{
c=a-b;
printf ("The solution: %d\n",&c);
}
else if (op == '*')
{
c=a*b;
printf ("The solution: %d\n",&c);
}
else if (op == '/')
{
c=a/b;
printf ("The solution: %d\n",&c);
}
} -
Jester01
veterán
válasz
Vasinger!
#3680
üzenetére
A konzol függvényeket nézegesd akkor.
-
Vasinger!
nagyúr
Sziasztok!
C-ben szeretnék egy menüt csinálni az alábbi módon:
1. menü opció 1
2. menü opció 2
....
....
stb.
Tehát az adott szám lenyomásával válassza ki a menüpontot a program. Viszont ha kiválasztja az egyik menüpontot a felhasználó, akkor törölje ki a képernyőt és ha lehet ne kelljen entert nyomnia.
Ezt meg lehet oldani valahogy econio.h nélkül? Ha igen, hogyan? -
Spam123
tag
Sziasztok!
Kisebb segítséget szeretnék kérni. Nem régiben kezdtem el programozni és kéne egy kis kezdőlökés.
Egy olyan programot kéne írnom, ami láncolt listákkal dolgozik, de még azt nem tanították az órákon.
Igazából annyi a feladat, hogy egy határidőnaplót kéne készítenem adatokkal. Tehát pl egy névhez kéne rendelnem telefonszámot, e-mail címet stb. amit a felhasználótól kér be a program amit majd egy file-ba exportál, ahonnan vissza is lehet tölteni később ezeket az adatokat. Tehát azt nem tudni, hogy a felhasználó mennyi rekordot fog megadni, hány személy adatait fogja létrehozni.
Remélem érthető voltam.

-
Jester01
veterán
válasz
PumpkinSeed
#3674
üzenetére
-
válasz
PumpkinSeed
#3671
üzenetére
Ja és a kolléga időben kijavított, mielőtt rögzült volna

-
Jester01
veterán
válasz
PumpkinSeed
#3671
üzenetére
Sokat ivott és hülyeségeket írkált

-
válasz
PumpkinSeed
#3660
üzenetére
if(ev % 400 == 0){
/* szökőév */
}
else if(ev % 100 == 0){
/* nem szökőév */
}
else if(ev % 4 == 0){
/* szökőév */
}
else
/* nem szökőév */
} -
kingabo
őstag
válasz
PumpkinSeed
#3660
üzenetére
Ne vedd sértésnek, de erre a két esetre kérnék pl-t.
![;]](//cdn.rios.hu/dl/s/v1.gif)
case (400-al osztható 100al nem)
case (400-al osztható 4-el nem)Írd Clipperbe, ott lehet a case-ben ilyet írni.

-
Karma
félisten
válasz
PumpkinSeed
#3660
üzenetére
Sajnos C-ben ez nem így működik, a case-eknek konstans értékeknek kell lennie. Na meg a switchbe is számot, vagy annak megfefelő értéket kell odaadni, hogy az alapján ugorjon.
-
kispx
addikt
válasz
PumpkinSeed
#3660
üzenetére
case (400-al osztható 100al nem)
case (400-al osztható 4-el nem)
Felesleges
De hol a 4-gyel oszthatóak?
-
kispx
addikt
válasz
PumpkinSeed
#3658
üzenetére
"Én switch case-re gondoltam először.
"
Azt, hogy?Szerintem if
ha (szokoev_feltelei igazak)
szokoev
else
nem szokoevEgyébbként ugyanaz mondtuk a szökőév definíciójának.
-
kispx
addikt
válasz
PumpkinSeed
#3655
üzenetére
"Mely évek a szökőévek?
Szökőévek a következők: minden néggyel osztható év, kivéve a százzal is oszthatókat. Szökőévek viszont a 400-zal osztható évek. Vagyis a századfordulók évei közül csak azok szökőévek, amelyek 400-zal is oszthatók."
Igaz, wiki, de most nem lő mellé
-
Davs
tag
válasz
PumpkinSeed
#3655
üzenetére
Szokoev az az ev, ami oszthato neggyel maradek nelkul, nem?
szoval 2000, 2004, 2008 szokoevek, 2001-3, 2005-7 nem
-
PumpkinSeed
addikt
Nem tud valaki egy alapvető instrukciót adni arról, hogy a szökőéves programmal hogyan induljak el? Azt tudom, hogy 400-al kell oszthatónak lennie és valahogy úgy van, hogy 100-al is és ha nem osztható 100-al akkor 4-el. De erre pontosan nem emlékszem. De viszont nem tudom, hogy hogyan akarna ez kinézni.
(#3654) kispx:

-
kispx
addikt
válasz
PumpkinSeed
#3653
üzenetére
Nem az történt.
Hanem, hogy float változot szeretett volna beolvasni a program, de karaktersorozatot kapott. Így a beolvasás sikertelen volt. (Ezt a scanf visszatérési értékkel letudod ellenőrizni). A változók tartalmát nem írta felül, viszont a ciklus újra végrehajtódott. -
Frenky89
addikt
Rendben és elnézést kérek, amiért nem tudtam értelmesen feltenni a kérdésemet.
-
Jester01
veterán
-
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

-
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
-
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?
-
Frenky89
addikt
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! 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); -
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
) -
chabeee
aktív 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;
} -
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?
-
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.
-
chabeee
aktív 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. -
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?

-
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? -
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
) -
chabeee
aktív 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. -
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.
-
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.
-
e=mc²
őstag
-
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...
-
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.
-
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.
-
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.
-
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.
Ú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!
- Hisense M2 Pro Lézer Okos Projektor // Számla+Garancia //
- Bomba ár! HP ProBook 430 G5 - i5-8GEN I 8GB I 256GB SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
- Samsung Galaxy A32 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S21+ / 8/128GB / Kártyafüggetlen / 12Hó Garancia
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RX 9060 XT 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő





Biztos nem tudja, hogy minden case-t egy



![;]](http://cdn.rios.hu/dl/s/v1.gif)





