Hirdetés

2024. június 14., péntek

Gyorskeresés

Hozzászólások

(#5601) #36268800


#36268800
törölt tag

Sziasztok!

Lottószámokat szeretnék beolvasni egy szövegfájlból. A számok 5 db oszlopban vannak megadva. A következő dolgokra szeretnék választ kapni:
-hogyan válasszam szét az oszlopokat? Jelenleg tabulátorral vannak tagolva, de ezt nyilván lehet bármilyen egyéb karakterre módosítani: szóköz, vessző, pontosvessző, stb.
-meddig olvassam a fájlt? Tegyek a végére valamilyen fájlvége jelet? Pl. -1 megfelelne? Van más konvenció erre?
-milyen módon lehet a számokat szépen beolvasni? Régebben készítettem egy hasonló programot és abban úgy oldottam meg, hogy beolvasott a progi egy teljes sort, aztán szétdarabolta a tartalmát. Nagyjából ilyen formában: "szöveg1";"szöveg2";"szöveg3";"szöveg4"endline - egy ilyen sort beolvasott egy elegendően nagy tömbbe, majd ráküldtem egy daraboló függvényt, ami pontosvesszőkig olvasta be a tartalmat és szétdobálta megfelelő változókba a "szövegeket". Mivel az egyetemen a laborvezetőm semmilyen érdemi kommentárt nem fűzött a dologhoz, fogalmam sincs, hogy ez mennyire számított elegáns vagy jó megoldásnak... az összkép tulajdonképpen megvolt (Legyen Ön Is Milliomos játék), és így ennyi.

Köszönöm előre is a segítséget!

[ Szerkesztve ]

(#5602) DrojDtroll válasza #36268800 (#5601) üzenetére


DrojDtroll
addikt

Egy statikus fájlal kell dolgozni, vagy mindig változik?

(#5603) #36268800 válasza DrojDtroll (#5602) üzenetére


#36268800
törölt tag

Tulajdonképpen hetente változik a sorok száma, hiszen akkor húzzák ki az újabb számokat (manuálisan szerkesztem a fájlt).
Az oszlopok száma mindig 5, mivel ötös lottóról van szó. :)

(#5604) DrojDtroll válasza #36268800 (#5603) üzenetére


DrojDtroll
addikt

akkor ha a fájlbeolvasást le akarod egyszerűsíteni akkor beírod a fájl elejére hogy hány sor van benne

először beolvasod ezt a számot majd indítasz két egymásba ágyazott ciklust.

a külső addig meg ahány sor van, a belső pedig az öt számot olvassa be,

ha szóköz van közte az a legjobb mert akkor elég egy sima scanf

(#5605) dobragab


dobragab
addikt

Javasolt valami whitespace-szel elválasztani a számokat. A scanf és társai ilyenkor nem tesznek különbséget egy ill. több különböző típusú whitespace között. Azaz ha a fájlban épp tabot vagy fájl végét sikerült használnod, azt is meg fogja enni space-ként.

1 2 3 4 5
6 7 8 9 10
...

Az fscanf visszatérési értékét érdemes vizsgálni, ami a fájl végét illeti. Azt adja vissza, hány formátumsztringbeli értéket töltött fel sikeresen. Ha 5 számról volt szó, akkor sikeres beolvasásnál 5-öt ad vissza.

Primitív példakód:

int szamok[5];
while(fscanf(fp, "%d %d %d %d %d", szamok, szamok+1, szamok+2, szamok+3, szamok+4) == 5)
{
// egy sor feldolgozása
}

Nem tudom, mennyire ismered a C-t, meg pontosan mit akarsz vele csinálni. Javasolt csinálni egy Lottoszam struktúrát, ha bármi komolyabbat csinálni kell vele. És lehet ciklusban olvasni az 5 db számot, csak akkor macerásabb a hibakezelés...

Ha mind el kell tárolni, akkor ismét érdekes kérdés következik:
1. ismerjük előre a darabszámot (fájl elejére oda van-e írva): VLA vagy malloc
2. nem ismerjük: nyújtózkodó tömb, láncolt lista, maximális pufferméret, stb.

Szóval ez a C legmacerásabb problémája.

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5606) #36268800 válasza dobragab (#5605) üzenetére


#36268800
törölt tag

Arra gondoltam, hogy egy láncolt listába beolvasom a sorok tartalmát, tehát a struktúrám valahogy úgy nézne ki, hogy

typedef struct lottoHet{
int szam1;
int szam2;
int szam3;
int szam4;
int szam5;
struct lottoHet *next;
}lottoHet;

miután ez megvan, végigpörgetem a listát és megszámoltatom egy 90 elemű tömbben, hogy egy-egy számot hányszor húztak ki az eddigi évek során. Puszta kíváncsiságból szeretném megírni a programot. Nyilván minimális eltérés lesz egy-egy darabszám között, mivel "90 alatt az 5" a lottó 5ös valószínűsége. :D Egyéni szórakozás...

Alapvetően nem gondoltam arra, hogy megszámolnám a sorokat, inkább találja ki a program, legyen okosabb annál, mintsem hogy mindent "a szájába rágjak".

[ Szerkesztve ]

(#5607) DrojDtroll válasza #36268800 (#5606) üzenetére


DrojDtroll
addikt

Akkor menj fájlvégjelig. Én az ilyesmit !feof()-al szoktam csinálni.

(#5608) dobragab válasza DrojDtroll (#5607) üzenetére


dobragab
addikt

feof-fal óvatosan, nem jóstehetség! Nem tudja kitalálni, hogy a következő beolvasás el fog-e halni (azaz a fájl végén vagyunk-e), hanem azt adja vissza, hogy az előző beolvasás EOF miatt halt-e el. Azaz könnyű rosszul használni, így tud még egy hibás adat bekerülni a lista végére.

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5609) #36268800 válasza dobragab (#5608) üzenetére


#36268800
törölt tag

Mi a véleményetek a megoldási menetemről? Jó úton indultam el szerintetek?

(#5610) dobragab válasza #36268800 (#5609) üzenetére


dobragab
addikt

Igen, jó lehet.

(#5611) DrojDtroll

Igen, általában jobb. Lehet a feof-ot is jól használni, de a helyes használata többnyire macerásabb, mint a visszatérési értékek vizsgálata.

[ Szerkesztve ]

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5611) DrojDtroll válasza dobragab (#5608) üzenetére


DrojDtroll
addikt

Akkor jobb az fscanf visszatérési értékeit nézegetni?

(#5612) dobozs


dobozs
csendes tag

Sziasztok!

Egy feladat megoldásban kellene a segítség, mert elakadtam.

A feladat az lenne, hogy egy stringet kell feltölteni egy másik string karaktereiből, úgy hogy a páratlan indexen magánhangzó a pároson mássalhangzó van, viszont nem tudom, hogy kellene megvalósítani, hogy végig töltse fel a stringet.

void sztring (char*, char*);

int main()
{
char str1[]="AEBCD", str2[37]={0};

sztring(str1,str2);

return 0;
}

void sztring (char *p1, char *p2)
{
int i=0;

while(*p1)
{
if(*p1=='A' || *p1=='E')
{
if(!(i%2))
{
*p2=*p1;
p2++;
i++;
}
}
if(*p1=='B' || *p1=='C' || *p1=='D')
{
if(i%2)
{
*p2=*p1;
p2++;
i++;
}
}
p1++;
}
}

most eredménynek csak annyit kapok, hogy a str2: AB viszont úgy kellene feltölteni, hogy ABECAD stb de ezt nem tudom, hogy kell megoldani, köszönöm a segítséget.

(#5613) EQMontoya válasza dobozs (#5612) üzenetére


EQMontoya
veterán

Én a feladatot sem értem, megpróbálod megfogalmazni magyarul? :B

Same rules apply!

(#5614) #36268800 válasza dobozs (#5612) üzenetére


#36268800
törölt tag

Esetleg használhatnád ezt az oldalt, hogy átláthatóbb legyen a kód!

(#5615) dobragab válasza #36268800 (#5614) üzenetére


dobragab
addikt

Vagy legalább a Programkód formázást így. :)

void sztring (char*, char*);

int main()
{
char str1[]="AEBCD", str2[37]= {0};
sztring (str1,str2);
return 0;
}

void sztring (char *p1, char *p2)
{
int i=0;
while (*p1)
{
if (*p1=='A' || *p1=='E')
{
if (! (i%2) )
{
*p2=*p1;
p2++;
i++;
}
}
if (*p1=='B' || *p1=='C' || *p1=='D')
{
if (i%2)
{
*p2=*p1;
p2++;
i++;
}
}
p1++;
}
}

[ Szerkesztve ]

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5616) #36268800 válasza EQMontoya (#5613) üzenetére


#36268800
törölt tag

Van két stringed, az egyikből kiolvasod sorban a karaktereket és
ha magánhangzót találsz, akkor azt beírod a másik string páratlan indexű helyeire (string2: [1] ... [3] ... [5]),
...aAeEiIoOuU
ha mássalhangzót találsz, akkor azt beírod a másik string páros indexű helyeire (string2: [2] ... [4] ... [6]),
...egyebek.

Olyasmit nem kell vizsgálni vajon, hogy biztosan betűk másolódjanak az új stringbe?

(#5617) EQMontoya válasza #36268800 (#5616) üzenetére


EQMontoya
veterán

És felteheted, hogy ugyanannyi mássalhangzó és magánhangzó van a forrás stringben?

Same rules apply!

(#5618) #36268800 válasza EQMontoya (#5617) üzenetére


#36268800
törölt tag

char str1[]="AEBCD", str2[37]= {0};

Ebből a sorból derül ki ez, nem? Tehát van egyszer AE, valamint BCD és a lezáró nulla. Ezeket kell bedobálni a második stringbe, ami 37 elemű, tehát str2[0]...str2[36]. A nulladik hely gondolom párosnak számít, bár most nekem az nem világos, hogy ha végig nézi az első stringet, abban van 5 darab betű. Ezeket beírja az str2 megfelelő helyeire:
str2[0] → B
str2[1] → A
str2[2] → C
str2[3] → E
str2[4] → D
str2[5] → \0

akkor a második string miért nem csak 6 elemű? Vagy most a "while(*p1)" az nem csak az első string végéig fut? És a lezáró nullával mi lesz?

Ja most látom, hogy a kérdés éppen erre irányul, hogy hogyan töltse fel végig a stringet. Akkor a feladat adott: van 5 karaktered és a lezáró nulla, az első 36 helyre írd be a megfelelő magánhangzót vagy mássalhangzót attól függően, hogy páros vagy páratlan indexen állsz-e, majd végül a 37. helyre dobd be a lezáró nullát.

[ Szerkesztve ]

(#5619) dobozs válasza #36268800 (#5618) üzenetére


dobozs
csendes tag

Igen, ez lenne a feladat.

(#5620) EQMontoya válasza #36268800 (#5618) üzenetére


EQMontoya
veterán

Írjsz egy függvényt, ami megmondja egy char-ról, hogy magánhangzó-e:

#include <ctype.h>
#include <stdio.h>
static char * maganhangzok = "aeiou";
int maganhangzo(char c)
{
int i = 0;
for(; i < strlen(maganhangzok); ++i)
{
if(maganhangzok[i] == tolower(c)) return 1;
}
return 0;
}

Ha ez megvan, akkor az eredeti tömbbön végigfutsz ezzel, és megnézed, hogy mennyi magánhangzód van.
Ezt követően azt szétszeded két tömbre, amit aztán használsz.
Utána pedig a feltöltésnél karbantartasz két indexet, és azokat lépteted annak függvényében, hogy a ciklusváltozód páros vagy páratlan.

int i=0;
int msh_idx = 0;
int mgh_idx = 0;
for(;i<celtomb_hossza -1 ; ++i)
{
if(i%2 == 0)
{
celtomb[i] = msh_tomb[msh_idx];
msh_idx = (msh_idx + 1) % msh_tomb_hossza; //strlen?
}
else
{
celtomb[i] = mgh_tomb[mgh_idx];
mgh_idx = (mgh_idx + 1) % mgh_tomb_hossza; //strlen?
}

}
//lezaro nulla ne maradjon le! :)

[ Szerkesztve ]

Same rules apply!

(#5621) armin80


armin80
újonc

sziasztok!

a következő feladatban kérnék segítséget:
van 3 karaktertömböm (pl.: byte elso[]="szia", byte masodik[]="hello",...), amit 3 másodpercenként szeretnék egymás után kiíratni.
köszi!

[ Szerkesztve ]

(#5622) alapz@j válasza EQMontoya (#5620) üzenetére


alapz@j
tag

for(size_t i = 0; i < strlen(maganhangzok); ++i)

Ezt a formát azért nem ajánlanám, mert minden egyes iterációban kiértékeli az strlen()-t, ami eléggé lelassítja a működést.

[ Szerkesztve ]

(#5623) dabadab válasza alapz@j (#5622) üzenetére


dabadab
titán

Ha már optimalizálunk, akkor csináljuk rendesen:
switch(c)
{
case 'a':
case 'e:
case 'i':
case 'o':
case 'u':
case 'A':
case 'E:
case 'I':
case 'O':
case 'U':
return 1;
default:
return 0;
}

vagy ha van valakinek türelme egy 256 elemű tömböt teleírni egyesekkel meg nullákkal:

return maganhangzok[ c ];

[ Szerkesztve ]

DRM is theft

(#5624) EQMontoya válasza alapz@j (#5622) üzenetére


EQMontoya
veterán

Babakódot írunk C-ben. :)
Ha gyorsra akarom írni, C++-ban fogom, és egy csomó dolgot beletolok fordítási időben.

[ Szerkesztve ]

Same rules apply!

(#5625) dobragab válasza EQMontoya (#5624) üzenetére


dobragab
addikt

Konkrétan az egészet. TMP FTW :)

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5626) matthew95(2)


matthew95(2)
senior tag

Üdv!
Esetleg van valaki itt aki c-t át tudna kódolni c#-ba? Elég fontos illetve sürgős lenne :) Nem hosszú kód, esetleg ha van valaki mindenképp írjon legyen szíves. Előre is köszi :R

(#5627) alapz@j válasza dabadab (#5623) üzenetére


alapz@j
tag

Nem kell kézzel megcsinálni, memset-eled nullával a betuk[256]-ot aztán egy ciklussal a magánhangzók ascii értékeinek megfelelő bájtokba egyeseket írsz :)

(#5628) alapz@j válasza dabadab (#5623) üzenetére


alapz@j
tag

Na, a babakódom :)

#include <string.h>

char maganhangzok[] = "aeiouAEIOU";
char betuk[256];

void setup_betuk(void) {
memset(betuk, 0, 256);
size_t len = strlen(maganhangzok);
for (size_t x = 0; x < len; ++x) betuk[maganhangzok[x]] = 1;
}

inline char maganhangzo_e(char x) {
return betuk[x];
}

[ Szerkesztve ]

(#5629) bear_


bear_
aktív tag

Sziasztok,

AVR-t szeretnék programozni C nyelven, ehhez keresek könyvet, tutorialt, akár angolul is. Sajnos amit a neten találtam nem igazán "kezdő" barát.

Előre is köszi :)

(#5630) dobragab válasza bear_ (#5629) üzenetére


dobragab
addikt

Üdv!

Szerintem akkor jársz legjobban, ha előbb C-t tanulod meg, onnan már az AVR-specifikus dolgok könnyebben jönnek. C-t meg szerintem innen érdemes, elsősorban előadások anyagai.

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5631) bepken


bepken
veterán

sziasztok,

egy újabb feladattal kapcsolatban lenne kérdésem hozzátok: [link]

ez pedig a megoldásom: [link]

ha lementem a példa kimenetet és összehasonlítom az én kimenetemmel, akkor ránézésre teljesen egyezik. feladat szerint pedig annyi az elvárás, hogy minden "hatos" egy sorral legyen elválasztva, de utolsó után már nem kell üres sor.

szerintem (!) az enyém ennek megfelel - bár file compare szerint az én kimeneti fájlom "hosszabb"....valószínűleg ezért van az, hogy a progcont se fogadja el.

mi lehet ennek az oka?

köszi előre is,
bepken

╔═══════ "Csak egy visszatérés létezik és az nem a királyé...hanem a JEDIÉ!" ═════╗ ╚════════════════ Xiaomi Mi A1 ═════ Huawei Nova 5T ═════════════╝

(#5632) dabadab válasza bepken (#5631) üzenetére


dabadab
titán

"egy újabb feladattal kapcsolatban lenne kérdésem hozzátok: [link]"

404 :F

DRM is theft

(#5633) bepken válasza dabadab (#5632) üzenetére


bepken
veterán

ja....vizsga van ma, ilyenkor lelövik valamiért az egészet...

feladat nagyjából: bemenet első sora a feldolgozandó esetek száma. minden sorra egy N•M méretű "hatost" kell kirajzolni '*' karakterekből. N páratlan, N >= 5, illetve M >= 3

példa bemenet:

2
5 3
7 4

╔═══════ "Csak egy visszatérés létezik és az nem a királyé...hanem a JEDIÉ!" ═════╗ ╚════════════════ Xiaomi Mi A1 ═════ Huawei Nova 5T ═════════════╝

(#5634) axioma válasza bepken (#5631) üzenetére


axioma
veterán

Nem lehet, hogy azert nem fogadja el, mert a felso reszen a fuggoleges sza'r utan (bal oldalt elso csillag) utan nincsen a maradek resz szokozzel kitoltve, hanem egybol a sorvege jel jon?
Ranezesre ugyanaz, de diff mar attol fuggoen mutatja jonak vagy sem, hogy mi a whitespace-ekre vonatkozo beallitasa vayg default-ja.
[Mondjuk ettol pont rovidebb lenne...]

[ Szerkesztve ]

(#5635) EQMontoya válasza bepken (#5633) üzenetére


EQMontoya
veterán

Sorvége jelek (\r\n vs \n) is különbözhetnek, amit nem fogsz látni, de a méret mégsem stimmel. :)
Csak tipp, a fileokat nem tudom megnézni innen.

[ Szerkesztve ]

Same rules apply!

(#5636) bepken válasza axioma (#5634) üzenetére


bepken
veterán

közben elérhető ujra az oldal (egy ideig csak)
tehát megnéztem és van egy ilyen rész a leírásban: "Mindegyik sorban közvetlenül soremelés követi a legutoljára kiírt csillag karaktert (azaz nem szerepelnek a sorok végén szóközök). A tesztesetekhez tartozó kimeneteket egy-egy üres sor választja el egymástól. Figyelem: az utolsó számjegyet nem követi üres sor!"

példa kimenet:

***
*
***
* *
***

****
*
*
****
* *
* *
****

ezt én sima '\n' megoldásnak értelmezem. öhm vagy miért jobb neki a \r :DDD

╔═══════ "Csak egy visszatérés létezik és az nem a királyé...hanem a JEDIÉ!" ═════╗ ╚════════════════ Xiaomi Mi A1 ═════ Huawei Nova 5T ═════════════╝

(#5637) EQMontoya válasza bepken (#5636) üzenetére


EQMontoya
veterán

\r\n: windows standard
\n: linux standard

Ennek oda-vissza konvertálására van a dos2unix parancs benne minden bashban. :)

Same rules apply!

(#5638) dabadab válasza bepken (#5636) üzenetére


dabadab
titán

A kettő között annyi a különbség, hogy a tiedben a legutolsó sor végén nincs \n, a megadott referenciánál meg van.

DRM is theft

(#5639) bepken válasza dabadab (#5638) üzenetére


bepken
veterán

csak bemásoltam, hogy hogyan is kell kinéznie, de sorra megyezik a két kimenet (utolsó sor után nincs új sor, ahogy kéri is a feladatban) - vagy legalábbis én értelmezésem szerint ezt kéri a feladat.

és esküszöm nem értem, miért nem jó ez így, de file compare eredményt is tudok mutatni:

E:\program\2\Új mappa>fc /n out.txt out2.txt
Comparing files out.txt and OUT2.TXT
***** out.txt
1: ***
2: *
3: ***
4: * *
5: ***
6:
***** OUT2.TXT
1: ***
2: *
3: ***
4: * *
5: ***
6:
*****

***** out.txt
7: ****
8: *
9: *
10: ****
11: * *
12: * *
13: ****
***** OUT2.TXT
7: ****
8: *
9: *
10: ****
*****

***** out.txt
***** OUT2.TXT
11: * *
12: * *
13: ****
*****

__________________________________________________

ez meg a két fájl egymás után:

E:\program\2\Új mappa>more out.txt
***
*
***
* *
***

****
*
*
****
* *
* *
****

E:\program\2\Új mappa>more out2.txt
***
*
***
* *
***

****
*
*
****
* *
* *
****

E:\program\2\Új mappa>

bocsi, ha értetlenkedek, de nagyon idegesít a dolog és szeretném megérteni a problémát. én kétszer ugyanazt a kimenetet látom :DDD

szerk.: out.txt az enyém, OUT2.txt pedig a referencia

[ Szerkesztve ]

╔═══════ "Csak egy visszatérés létezik és az nem a királyé...hanem a JEDIÉ!" ═════╗ ╚════════════════ Xiaomi Mi A1 ═════ Huawei Nova 5T ═════════════╝

(#5640) dabadab válasza bepken (#5639) üzenetére


dabadab
titán

"utolsó sor után nincs új sor, ahogy kéri is a feladatban"

Nem, nem ezt kéri. Azt kéri, hogy azután ne legyen üres sor. A \n-nek attól még ott kellene lennie az utolsó sor végén is.

Egyébként valami rettenetesen béna compare toolt használhatsz, mert egy sima diff ezt mondja:

$ diff ref.txt out.txt
13c13
< ****
---
> ****
\ No newline at end of file

Ennyi.

Ha megnézed őket mondjuk egy hexa editorral, hogy láss minden byte-ot, akkor is látszik, hogy összesen ennyi különbség van.

Sőt, ha megnézem a forráskódodat, akkor is látszik, hogy ez a gond :)

[ Szerkesztve ]

DRM is theft

(#5641) bepken válasza dabadab (#5640) üzenetére


bepken
veterán

hogyaza....korábban puts("\n"); -val próbálkoztam a legvégén putchar('\n'); helyett és olyankor dupla soremelést tett a végére (ami nyilván hibás) - viszont ha meg csak putchar-ral zártam a végét, akkor a két hatos közé nem tett üres sort. innentől meg csak forgattam magam, hogy végülis a feladat is ezt várja. ráadásul ahogy bemásoltam ide is, parancssorban kiíratva a kimenet is teljesen azonos volt (jól sejtem, hogy a cmd tesz be automatikusan egy üres sort, ha hiányzik a fájl végéről és úgy írja ki a fájl tartalmát? mert akkor ez kavart be)

na lényeg, hogy végül ez volt a kínja. köszönöm szépen a segítséget! :R

(tudom, hogy nagy hiba, de windows alatt tanulom a C-t, itt meg hirtelen csak ilyen compare cuccot találtam. mondjuk itt is van sokféle kapcsoló, lehet találnék olyat, ami pontosabban megtalálja a különbséget)

╔═══════ "Csak egy visszatérés létezik és az nem a királyé...hanem a JEDIÉ!" ═════╗ ╚════════════════ Xiaomi Mi A1 ═════ Huawei Nova 5T ═════════════╝

(#5642) LógaGéza


LógaGéza
addikt

Üdv!
Kicsit ide is tartozik a kérdésem, hátha itt találok megoldást, Arduino topikban már próbálkoztam

Szóval ezt szeretném életre kelteni. Amikor a LEDSign.ino-t fordítanám, akkor kiakad a következő hibával:
LEDSign:195: error: 'lineInput' was not declared in this scope

Hogyan tudnám ezt megoldani? Annyira jöttem rá, hogy maga a lineInput a mellette lévő LineInput.ino-ban van leírva. Hogy miért, azt nem tudom, de biztos oka volt rá a fejlesztőnek :)

Köszönöm előre is a segítséget! :R

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#5643) LógaGéza válasza LógaGéza (#5642) üzenetére


LógaGéza
addikt

Sztornó, túl egyszerű volt a megoldás... Meg kellett nyitni az IDE-ben egy másik fülön a LineInput.ino-t... :W

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#5644) EQMontoya válasza LógaGéza (#5643) üzenetére


EQMontoya
veterán

Jézus, milyen IDE-t használsz?

Same rules apply!

(#5645) LógaGéza válasza EQMontoya (#5644) üzenetére


LógaGéza
addikt

Mivel Arduino-t használok ezért Arduino IDE-t :)

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#5646) bepken


bepken
veterán

sziasztok,

[link] - alábbi feladatot sikerült megoldanom, de mégsem tiszta néhány dolog, így inkább kérdezek :)

az a verzió, ami működik:

_______________________________________

int amper( char *line)
{
char *tok, *amp;
int szam, szorzo, eredmeny;

tok=strtok(line, " ");
szam=atoi(tok);
amp=strtok(NULL, "\0");

if((strcmp(amp, "A")) == 0){
eredmeny = (szam);
}
if((strcmp(amp, "kA")) == 0){
eredmeny = (szam*1000);
}
if((strcmp(amp, "mA")) == 0){
eredmeny = (szam/1000);
}
return eredmeny;
}

az a verzió, ami valamiért nem:

_______________________________________

int amper( char *line)
{
char *amp;
int szam, szorzo, eredmeny;

sscanf(line, "%d %s", &szam, amp);

// printf("szam: %d\tegyseg: %s\n", szam, amp);
if((strcmp(amp, "A")) == 0){
eredmeny = (szam);
}
if((strcmp(amp, "kA")) == 0){
eredmeny = (szam*1000);
}
if((strcmp(amp, "mA")) == 0){
eredmeny = (szam/1000);
}
return eredmeny;
}

gondoltam, csak gyorsabb volna egyetlen művelettel tárolni mindkét értéket. erre való az sscanf vagy tévedek? valamiért mégis kifagy a program ezzel a verzióval...

tárgytalan, bocsi....az amp itt tömb, nem mutató.....

[ Szerkesztve ]

╔═══════ "Csak egy visszatérés létezik és az nem a királyé...hanem a JEDIÉ!" ═════╗ ╚════════════════ Xiaomi Mi A1 ═════ Huawei Nova 5T ═════════════╝

(#5647) EQMontoya válasza bepken (#5646) üzenetére


EQMontoya
veterán

A kapcsolat nem biztonságos

Rendszergazdát picsánrúg, feladatot máshová felteszi... :)

Same rules apply!

(#5648) dobragab válasza EQMontoya (#5647) üzenetére


dobragab
addikt

+1

Tömb és pointer összekeveréséért meg halálfej.

Tudom, tudom, akasszak a tökömre egy lámpát, hogy sötétben is tudjak kaszálni.

(#5649) maestro87


maestro87
őstag

Sziasztok!

Adott egy hasonló struktúra (ezt a netről szedtem):
struct Employee
{
char ename[20];
int ssn;
float salary;
struct date
{
int date;
int month;
int year;
}doj[3];
}emp = {"Pritesh",1000,1000.50,{{22,6,1990},{10,7,1980},{27,9,1970}}};

A kérdésem az lenne, hogy csak a date struktúra tömböt (doj változót) hogyan lehet egy másik fájlban alapértékekkel feltölteni? Külön-külön tudom hogy kell az elemekre hivatkozni, de én egyszerre szeretném feltölteni, az értékeket kapcsos zárójelek között megadva.

A tippem ez lenne, de valamiért nem akar működni:
extern struct date doj[3] =
{
{22,6,1990},
{10,7,1980},
{27,9,1970},
};

Annyi eltérés van az én kódomban, hogy én typedef-fel kívül hoztam létre a "date" struktúrát.
Előre is köszi a válaszokat! :R

(#5650) buherton válasza maestro87 (#5649) üzenetére


buherton
őstag

Definiálod a struktúrát, létrehozod a változót és majdan így adsz annak értéket valahogy: emp.date[] = {}; Érdemes memsettel rögötn nullázni is.

MOD: miért nem pointer a date és akkor a probléma le lenne tudva. Sőt jobb, ha egy láncolt listát csinálsz és kész.

[ Szerkesztve ]

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

Copyright © 2000-2024 PROHARDVER Informatikai Kft.