Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#2101) brsd válasza doc (#2100) üzenetére


brsd
csendes tag

Új projektet hoztam létre, azon belül az "Empty Project"-et választottam. Most meg ezt írja:

" "proba - Debug" uses an invalid compiler. Probably the toolchain path within the compiler options is not setup correctly?! Skipping..."

(#2102) doc válasza brsd (#2101) üzenetére


doc
nagyúr

valami gaz van a beallitasaiddal
fel van rakva a gcc?

(#2103) brsd válasza doc (#2102) üzenetére


brsd
csendes tag

A GCC compiler nem települ fel a CodeBlocks-szal együtt ?

(#2104) doc válasza brsd (#2103) üzenetére


doc
nagyúr

windows alatt nem tudom, Linux alatt tutira nem

(#2105) brsd válasza doc (#2104) üzenetére


brsd
csendes tag

Végre működik. "Settings" > "Compiler and debugger" > "Toolchain executables", ott kellett az "Auto detect"-re kattintani, és megadni a fordító utvonalát, azt hiszem. Windows alatt települ a GCC fordító a CodeBlocks-szal együtt.

Köszönöm mindenkinek a segítséget !

(#2106) klayton#1


klayton#1
tag

hello, egy ujabb problemam lenne, a következő feladat megoldásában:
"Exercise 2-4. Write an alternative version of squeeze(s1,s2) that deletes each character in
s1 that matches any character in the string s2."

Az én megoldásom a képen látható, viszont valamiért "segmentation fault" hibaüzenetet ír ha futtatom. valaki tudna esetleg segíteni, hogy kéne kijavítani?

(#2107) Jester01 válasza klayton#1 (#2106) üzenetére


Jester01
veterán

1) legközelebb lehetőleg szövegesen másold be a kódot mert én ugyan nem fogom begépelni, hogy kipróbálhassam
2) a belső ciklusod minden egyes különbségre másol egyet. Először összehasonlítja az e-t az e-vel, stimmel, nem történik semmi. Aztán az e-t az l-el, nem stimmel, másolja az e betűt. Jön az m, nem stimmel, másol még egy e betűt. És így tovább. A segfault azért lesz, mert hosszabb lesz a kimenet mint az eredeti string. Úgy kellene, hogy a belső ciklus csak megállapítja, hogy benne van-e az adott betű a másik tömbben, és utána egyszer másolja ha szükséges.

Jester

(#2108) klayton#1 válasza Jester01 (#2107) üzenetére


klayton#1
tag

1. megfogadom:)
2. koszi szepen, kicsit mashogy indultam neki, es mar nagyjabol van egy jo megoldasom, meg pofozgatom egy kicsit.

koszi szepen a valaszt:)

(#2109) vamzi


vamzi
őstag

Sziasztok!

A segítségeteket szeretném kérni, a következő problémámhoz:

Hogyan lehet azt C-ben megvalósítani, hogy a programom az adott weboldal forráskódját lementse txt-be?
Nem a kész megoldást kérem(azért egy példaprogramot nem vennék rossz néven :) ), hanem iránymutatást, doksikat, olvasmányokat, szakirodalmat. A nyelve angol vagy magyar lehet, utóbbi előny, de előbbi is megfelel.
De ha valaki fejből leírja, akkor elég nekem pszeudo nyelven is :R

Előre is köszönöm!

(#2110) Gyuri16 válasza vamzi (#2109) üzenetére


Gyuri16
senior tag

eloszor meg kell tanulnod hogyan tudsz halozaton komunikalni c-bol. ehhez a kulcsszo a socket. en eddig csak linuxon programoztam ilyet, de gondolom elegge hasonlo lesz windowson is. kezdetnek par link:
[link]
[link]
winsock (windowsos api):
[link]

ha ez megy akkor a http protokolt kell elsajatitani. ebbol neked leginkabb a get method kell. (ezt legjobb ugy tanulni, hogy telnettel csatlakozol a kivant oldal 80-as portjahoz, es elkuldod neki a keresed, es nezed milyen valaszt kapsz)

a program igy fog kinezni:
csatlakozol a kivant weboldal 80-as portjahoz
elkuldod a http requestet, ami kb igy nez ki:

GET /index.html HTTP/1.1
Host: www.example.com

valaszkent kapsz egy http headert, ebbol kihamozod a hibakodot. ha ez 200 akkor jo, es a header utan maga a dokumentum van, ha mas akkor valami hiba van (ami nem feltetlenul rossz, "hiba" lehet atiranyitas is, ezeket fel kell dolgozni valahogy)
(ha csak a forraskod kell, akkor ennyi, ha a tobbi fajl is - css, kepek, scriptek - akkor azokat hasonlo modon http-vel lekered)

egyelore ennyi, ha gondolod nezz utana ezeknek, es ha valami nem vilagos nyugodtan ird ide a konkret kerdeseket.

Nem vagyok egoista, csak uborkagyalu!

(#2111) Jester01 válasza Gyuri16 (#2110) üzenetére


Jester01
veterán

De persze windowson van erre API függvény, linuxon meg ott a libcurl.

Jester

(#2112) vamzi válasza Gyuri16 (#2110) üzenetére


vamzi
őstag

Köszönöm szépen, ezen tényleg el tudok indulni. Az első linkben szereplő könyvnek van magyar változata is és ez sokat lendít a dolgon. :R Úgy érzem a linux-os változatot fogom benyakalni, úgy sem áll tőlem távol.

Most már van annyi olvasnivalóm, hogy egy kis időre eltűnök, és majd jövök mikor nekiállok a tényleges kódot összerakni.

Köszönöm még egyszer! :R

További szép napot.

(#2113) vamzi válasza Jester01 (#2111) üzenetére


vamzi
őstag

Jaj igen a libcurl-t megtaláltam én is linuxra. Windows-ra milyen api kell?

(#2114) Jester01 válasza vamzi (#2113) üzenetére


Jester01
veterán

(#2115) vamzi válasza Jester01 (#2114) üzenetére


vamzi
őstag

Köszönöm szépen :R
Egyébként guglizgattam még mielőtt ide jöttem volna, de nem jártam nagy sikerrel. Folyamatosan csak c++ vagy c# nyelvre találtam megoldásokat. :B

(#2116) Juhtúró


Juhtúró
tag

sziasztok,
tud vki egyszerű megoldást, gccben itoa függvény pótlására?

http://linuxtutorialok.blogspot.com/

(#2117) Jester01 válasza Juhtúró (#2116) üzenetére


Jester01
veterán

snprintf

Jester

(#2118) PetX


PetX
aktív tag

Sziasztok!

Fejlesztőt keresek.
Leírás:
Adott egy központi rendszer (PC+GSM modul) és kliensként PLC egységek.
Ez egy adatgyűjtő rendszer, az állapotváltozásokat SMS-ben küldi a központi rendszernek(KR).
A KR SQL táblában letárolja az adatokat, és mint riasztás az adott telefonra tovább küldi riasztás képpen. Kapcsolódik hozzá egy PHP-s alapú webes felület a LOG-ok illetve események manuális listázásához, új PLC-s egységek/riasztások felvitelére.
A KR-re írt program, C-ben íródott a forráskód is megvan, de sajnos nincs a programnak megfelelő hibakezelése. Linux környezet (SuSE).
Mivel a SMS kódtábla adott és nem akarjuk az összes PLC-t is újra programozni így a régit szükséges használni.

Nagy vonalakban erről lenne szó, ha van ilyen ismerősötök vagy cég akit tudtok ajánlani, ne tartsátok vissza! :DDD
Akit érdekel Írjon PÜ-t.

Félre a viccet, komolyan szükségem lenne legalább 2 fejlesztőre árajánlat stb.

Minek iszol és vezetsz, ha szívhatsz és repülhetsz!?

(#2119) CPT.Pirk


CPT.Pirk
Jómunkásember

Van egy problémám.

Üres stringet kell detektálnom C-ben. A probléma, hogy kvázi függvénybe kell ezt megcsinálni, hogy máshonnan kapjon stringet, szal nem előre a kódba írt stringet kell vizsgálni.
Szóval valahonnan jön a script, ráadásul még pointerezni is kell. Ötletek?

Sokat próbáltam a pointereket, de nem akar menni a dolog. Pl. próbáltam kiírni a pointer által mutatott string elemeit, de csak számokat kapok.

Van pl. az argc *argv-s argumentum bekérés, hogy tudom megcsinálni, hogy átkerüljön a tartalma egy sima tömbbe, amivel lehet dolgozni?

Meg ilyen alap kérdések, plusz pár dolog, amiből még kérdezni sem tudok. ;]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2120) doc válasza CPT.Pirk (#2119) üzenetére


doc
nagyúr

a gond az hogy nem ertem mit szeretnel :)
az *argv[] mar eleve egy tomb. ha masolni szeretnel, hasznalhatod cikluson belul az strcpy fuggvenyt
ha parameterkent akarod atadni, akkor siman char* a tipus es kesz
ha azt akarod megnezni hogy ures-e, az a legegyszerubb
pl:

bool isEmpty(char* s)
{
return !*s;
vagy
return s[0] == 0; (igy olvashatobb, de kevesbe helytakarekos, es foleg kevesbe 'geek' :D)
}

(#2121) CPT.Pirk válasza doc (#2120) üzenetére


CPT.Pirk
Jómunkásember

Ilyesmire gondolok, de még tudnia kel azt, hogy a space és tabulátor esetén is ürse scriptet ad vissza, azok esetében viszont akkor más karakter nem lehet. Szal ne bonyolítsuk, ha csak egy karakteres a string, akkor meg kellene nézni, hogy spacve v. tab van-e, vagy ha egyik sincs, akkor meg amit te írtál. Ezeket kellene egybegyúrni.

Viszont egy kis magyarázatot kérnék, én legalább egy IF függvénnyel gondolkodtam eddig.

[ Szerkesztve ]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2122) doc válasza CPT.Pirk (#2121) üzenetére


doc
nagyúr

ha space meg tab is uresnek szamit, akkor kicsit valtozik a logika, vegig kell iteralni a stringen, es ha olyan karaktert talalsz ami a fentiek egyike sem, akkor nem ures
pl:

bool isempty(char *s)
{
char *p;
for (p=s; *p; ++p)
if (*p != ' ' && *p != '\t')
return false;
return true;
}

ki nem probaltam, de igy ranezesre jonak kell lennie :)

a *s ugye a karakter amire az 's' valtozo mutat (jelen esetben, mivel a pointer es a tomb C-ben ugyanaz, a string elso karaktere)
ha ez a string veget jelzo 0, akkor nyilvan ures, tehat a !*s igaz lesz (ez ugyanaz mint a *s == 0)

de a space/tab miatt ez ugyebar mar nem jatszik :)

(#2123) CPT.Pirk válasza doc (#2122) üzenetére


CPT.Pirk
Jómunkásember

Bedobva a fordítóba, már rögtön a bool után hiányol valamit.

Ha jól értem:
bool isempty(char *s) - itt az *s lesz az a string, amit vizsgálunk.

char *p; -csinál egy pointert. De ez most mutat valamire? Vagy csak üres tömb?

for (p=s; *p; ++p) - itt a kezdőérték mi? A p megkapja az s elemeit? A feltétel meg az hogy amíg van eleme, és addig a ++p lépteti az elemeket?

if (*p != ' ' && *p != '\t') - itt a space és a tab vizsgálat van, ez tiszta.

Hogyan tudnám összehozni a dolgot mondjuk egy scanf-el? Az argv dolog szerintem itt nm jó, mert annak alapból az első eleme a file neve. A t. tanárúr nem szereti a scanfet, de kipróbálni jó lenne.

Régen volt a C, lua-ban csináltam pár dolgot az elmúlt 2 évben, az sokkal egyszerűbbnek tűnik egyenlőre.

[ Szerkesztve ]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2124) doc válasza CPT.Pirk (#2123) üzenetére


doc
nagyúr

ja igen, a bool nem C-s tipus (nagyon regota C++ -ozok :D). a bool-t csereld ki int-re, a false-t 0-ra, a true-t meg 1-re es jo lesz

char *p; -csinál egy pointert. De ez most mutat valamire? Vagy csak üres tömb?
mivel erteket nem adtal neki, 'sehova' nem mutat, pontosabban de, csak teljesen random helyre (igy ha pl irni akarsz oda, akkor jo esellyel egybol segfaultot kapsz)

for (p=s; *p; ++p) - itt a kezdőérték mi? A p megkapja az s elemeit? A feltétel meg az hogy amíg van eleme, és addig a ++p lépteti az elemeket?
a p ugyanoda fog mutatni ahova az s, vagyis a string elso karakterere
a *p azt a karaktert jelenti, ahova a p mutat. mivel C-ben a 0 hamis, a nem 0 pedig igaz, ez a feltetel akkor teljesul, ha *p nem 0. vagyis ha elertuk a string veget jelzo 0-t, a feltetel hamis lesz, es a ciklusnak vege

a fuggvenynek semmi koze a scanf-hez, olyan stringgel hivod meg amilyennel akarod, ez nyilvan lehet egy scanf-el bekert is
amugy a scanf valoban az ordog muve, ne hasznald :D nincs pl semmi ellenorzes a hosszra, igy ha kicsi tombot foglalsz neki akkor egybol el is crashel a programod. azonkivul a whitespace karaktereket (pl space) mezoelvalasztonak fogja fel, tehat ha space-t is tartalmazo stringet akarsz beolvasni, akkor nem mesz vele sokra :)

erre szokas irni ellenorzott getline fuggvenyt, Gyorben pl. Bauer is 'kiadott' egyet, amit nyugodtan lehet hasznalni vizsgan is

(#2125) CPT.Pirk válasza doc (#2124) üzenetére


CPT.Pirk
Jómunkásember

No, ellestem pár dolgot órán, meg elvileg csak annyit kell csinálnom, hogy üres-e a string, mert a tab, space vizsgálat már a köv. srác dolga, aki az strIsBlank-et írja.

Órán eddig jutottam el:

int main ()
{
char test[]="abc";
strIsEmpty(test);
return 0;
}

int strIsEmpty(const char *str)
{
while(str)
if(!*str || !str)
printf("ures string");
return 1;
printf("nem ures a string");
}

Nem volt időm lejavítani, majd holnap megcsinálom. A lényeg az, hogy be kell mutatni a működést is, ezt ott a mainben egy string értékadással oldottam meg. Azzal volt bajom főleg, hogy hogyan jut át a string, pointer egyik függvényből a másikba. Lua-ban sokkal egyszerűbb volt leírni olyasmit.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2126) doc válasza CPT.Pirk (#2125) üzenetére


doc
nagyúr

a parameteratadas pont ugy tortenik mint Lua-ban meg a programozasi nyelvek tulnyomo reszeben: a fuggvenynev utani zarojelbe irod :D igaz, a C tipusos nyelv, tehat azt is meg kell adni

viszont amit irsz, nem igazan jo
a while ciklusod addig fut, amig a string elso karaktere nem a lezaro nulla, viszont mivel a pointert nem valtoztatod, mindig ugyanoda (az elso karakterre) mutat
raadasul nem hasznaltal { } -t, igy ures stringnel a vegtelensegig azt fogja irogatni hogy ures
egyedul akkor fog visszaterni, ha NULL pointert adsz at neki, mivel akkor mar a while-ba sem fut bele, viszont olyankor meg fix 1-et ad vissza

csak azt nem ertem, miert nem probalod ki a programot? akkor egybol kiderulne hogy nem jo...

(#2127) CPT.Pirk válasza doc (#2126) üzenetére


CPT.Pirk
Jómunkásember

Igen, while-nál kimaradt, a pointerrel meg kezdek valamit. Az óra végén csak egy fordításra volt időm, akkor nem adott hibát, de végtelen ciklus volt, mert rossz feltételt írtam a whilehoz. Per pill itt sem tudom lefuttatni, mert nem tudok átlépni a linuxra egy fontos feltöltés miatt, aztán itt a w7 x64-en csak a cygwin van fent, de az meg amit lefordít, az exe hiányol egy nem létező 64 bites dll-t a cygwinből. Van más alternatíva, de nem akarok win alatt progni, majd holnap megcsinálom Mint alatt, csak bedobtam a félkész kódot, hogy kb. mi a terv. :B

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2128) !wannabe


!wannabe
tag

Sziasztok,

Van egy kódom itt alant. (Nem én írtam csak átalakítottam)

code

Q.: Segmentation fault-al elszáll amikor új elemet adok hozzá, miért :F

Előre is köszi a segítséget.

[ Szerkesztve ]

(#2129) Gyuri16 válasza !wannabe (#2128) üzenetére


Gyuri16
senior tag

az add fuggvenyedben van a hiba a
end->next = new;
sornal. az elso elem hozzaadasanal az end NULL, ezert a segfault.

valami ilyet javaslok:

void add( struct node *new ) /* adding to end of list */
{
if( head == NULL ) /* if there are no nodes in list, then */
head = new; /* set head to this new node */
if (end != NULL) // megnezzuk van e mar utolso elem
end->next = new; /* link in the new node to the end of the list */
new->next = NULL; /* set next field to signify the end of list */
end = new; /* adjust end to point to the last node */
}

Nem vagyok egoista, csak uborkagyalu!

(#2130) Karma válasza Gyuri16 (#2129) üzenetére


Karma
félisten

Én egy dolgot fűznék hozzá, ha már a szakmai kérdés megoldódott: célszerű az egysoros if-belsőségeket is {} közé tenni, mert nem feltétlen egyértelmű első pillantásra, plusz jó kis bugforrás később.

“All nothings are not equal.”

(#2131) CPT.Pirk válasza doc (#2126) üzenetére


CPT.Pirk
Jómunkásember

No, végre összeállt a dolog. Miután végiggondoltam, rájöttem h. nem is kell nekem végiglépkedni a stringen, felesleges az egész while cucc bele, mert az már másnak a feladata, hogy akkor is üres stringet adjon vissza, ha space, tab van benne, nekem csak simán üres stringet kell keresnem. Beírva valamit a test[] mögé, frankón eldönti, hogy mi a helyzet. Szóval szerintem jó így.

#include <stdio.h>

int main ()
{
char test[]="";
strIsEmpty(test);
return 0;
}

int strIsEmpty(const char *str)
{
if(!*str || !str){
printf("A string ures\n");
return 1;
}
printf("Nem ures a string\n");
}

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2132) doc válasza CPT.Pirk (#2131) üzenetére


doc
nagyúr

na igy mar alakul
ket dolog: az if-nel megforditanam a ket feltetelt, tehat igy: if(!str || !*str), ugyanis igy eloszor a NULL pointert ellenorzod le, csak utana azt, ahova mutat, de a mostani megoldas is teljesen jo

a masik mar kicsit csunyabb: a fuggvenyednek csak akkor van visszateresi erteke, ha ures a string, kellene a vegere egy return 0; igy ha nem ures, akkor 0-t ad vissza (erre elvileg a fordito figyelmeztetett is teged!)

(#2133) CPT.Pirk válasza doc (#2132) üzenetére


CPT.Pirk
Jómunkásember

Igen, jó h. szóltál a return 0; miatt, tényleg hiányzott, valamit mindig elfelejtek. ;]
Egyébként a gcc nem szólt a return hiánya miatt és futási problémát sem tapasztaltam.

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2134) doc válasza CPT.Pirk (#2133) üzenetére


doc
nagyúr

forditasnal mindig add meg a -Wall kapcsolot a gcc-nek, igy sikoltozni fog minden csunyasagert, rengeteg idot meg lehet sporolni igy a hibakeresesen
amugy futasi idoben nem okoz most problemat, mivel nem hasznalod fel sehol a visszateresi erteket :)

(#2135) CPT.Pirk válasza doc (#2134) üzenetére


CPT.Pirk
Jómunkásember

No, talált is valamit:

gcc -Wall strempty.c
strempty.c: In function ‘main’:
strempty.c:6: warning: implicit declaration of function ‘strIsEmpty’

Az volt a gondja, hogy előbb volt a main rész, mint a benne hivatkozott strIsEmpty.

[ Szerkesztve ]

Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)

(#2136) doc válasza CPT.Pirk (#2135) üzenetére


doc
nagyúr

igen, ezert szoktak a main-t legalulra tenni (illetve a hasznalt fv-eket kulon file-okba)
de elkerulheted ezt az uzenetet, ha meg a main elott deklaralod a fuggvenyedet, igy pl. nem kapsz egy warningot sem:

1 #include <stdio.h>
2
3 int strIsEmpty(const char *str);
4
5 int main ()
- 6 {
| 7 char test[]="";
| 8 strIsEmpty(test);
| 9 return 0;
| 10 }
11
12 int strIsEmpty(const char *str)
- 13 {
- 14 if(!*str || !str){
2 15 printf("A string ures\n");
2 16 return 1;
2 17 }
| 18 printf("Nem ures a string\n");
| 19 return 0;
| 20 }

(#2137) !wannabe válasza Gyuri16 (#2129) üzenetére


!wannabe
tag

Köszi a választ Gyuri, segített. Socket programozáshoz a Beej's Guide-on kívül tanácsoltok még valamit? Ti mennyire foglalkoztatok ezzel a témával?

[ Szerkesztve ]

(#2138) Retekegér


Retekegér
HARDVERAPRÓD

Hali!

Tudnátok ajánlani értelmes feladtagyűjteményt (akár nyomtatott, akár online verziót)?
Ezalatt azt értem, hogy jó lenne minél több gyakorló feladat egy-egy témakörhöz.

<< Heimdal >>

(#2139) Karma válasza Retekegér (#2138) üzenetére


Karma
félisten

Milyen szinten? Alapozásnak szerintem ez egy elég jól sikerült könyv-kettős. Az első kötet végig alap-algoritmusokat gyakoroltat, a másodiknál már gondolkozni is kell néha :P (Meg nem is tetszett annyira.)

Ha valami higher level kéne, arra már nem tudok mit mondani.

Mondjuk valami webbel kapcsolat feladatsorra én is kíváncsi lennék, pl. amin lehetne GWT-t vagy Vaadint gyakorolni.

[ Szerkesztve ]

“All nothings are not equal.”

(#2140) Retekegér válasza Karma (#2139) üzenetére


Retekegér
HARDVERAPRÓD

Thx, kezdőtől haladóig bármi, hogy az alapszintű algoritmusok is rutinból menjenek. Elmélettel relatíve könnyen lehet haladni, csak kevés példa van a könyvben gyakorlásra sajnos, pedig az lenne a lényeg.

<< Heimdal >>

(#2141) Karma válasza Retekegér (#2140) üzenetére


Karma
félisten

Mindenképp keresd meg ezt a könyvet akkor, különösen az első kötetet.

[ Szerkesztve ]

“All nothings are not equal.”

(#2142) Retekegér válasza Karma (#2141) üzenetére


Retekegér
HARDVERAPRÓD

Ja, csak egy eladó példányt kell találni, talán antikváriumban, ha van. :))

<< Heimdal >>

(#2143) SDA


SDA
csendes tag

Hali!

Egy kis segítségre lenne szükségem! Cprogból van egy csomó feladat, string kezelő util-t kell csinálni, és fönnakadtam a középre igazításnál... strCenter()... kerestem és találtam is a neten mintákat, de az egésznek a működését nem értem. Esetleg valaki letudná írni nekem, hogy PC szintén itt minek kell történnie, esetleg egy kezdő lökés is jól jönne.

Köszi!

(#2144) doc válasza SDA (#2143) üzenetére


doc
nagyúr

pontosan mi a feladat? adott egy string meg egy szelesseg, es jobbrol es balrol space-ekkel kell feltolteni amig el nem eri a megadott meretet? mert akkor csak annyit kell csinalni ami maga a feladat: az elejere teszel egy space-t, ha nem erte el a kivant szelesseget akkor a vegere is, ha igy sem, akkor kezded elolrol

vagy egy szebb megoldas: a megadott szelesseg es a string hosszanak kulonbseget elosztod kettovel, es az elejere meg a vegere is ennyi space-t illesztesz (paratlan eseten meg a vegere meg egyet)

(#2145) SDA válasza doc (#2144) üzenetére


SDA
csendes tag

Igen ez lenne a feladat ahogy írtad, viszont konkrét szélesség nincs megadva, amiben a stringet középre kellene igazítani... ilyenkor mi van?..

(#2146) F-ECT$ válasza SDA (#2145) üzenetére


F-ECT$
titán

Hát pl bekéred azt is, mint paramétert. Ilyenkor persze vizsgálni kell, hogy a szélesség ne legyen kisebb, mint maga a szöveg.

Dive ever, work never.

(#2147) SDA válasza F-ECT$ (#2146) üzenetére


SDA
csendes tag

Na megpróbálkozok vele, köszi!!

(#2148) Peter Kiss válasza SDA (#2145) üzenetére


Peter Kiss
senior tag
LOGOUT blog

Szar a feladat, mi lenne. :DDD középre igazítani csak valamihez képest lehet, amíg ez nincs tisztázva, kár vele foglalkozni. Esetleg le kell kérdezni, mennyi hely áll rendelkezésre (fogalmam sincs, hogyan kell).

Emellett elég csak az elejére szóközöket rakni. Amire még érdemes lehet figyelni, az a fél betűnyi hely problémája. Kerekítésre ötlet:

int space_count;
double space;

space_count = ( int ) ( ( (line - strlen) / 2 ) + 0.5);

A line az a sor hossza, az strlen pedig a szöveg hossza.

(#2149) doc válasza Peter Kiss (#2148) üzenetére


doc
nagyúr

esetleg lehet hogy a kepernyo szelessegehez kepest kell igazitani?
jogos, a vegere nem feltetlenul kell space (ha szines hatteret meg egyeb marhasagokat akarsz, akkor jol johet, bar azt meg mashogy illik megoldani)

(#2150) Peter Kiss válasza doc (#2149) üzenetére


Peter Kiss
senior tag
LOGOUT blog

Igen, a konzolablak méretéhez képest kellhet igazítani. Ilyet leltem:

#include <sys/ioctl.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc,char **argv)
{
struct winsize ws;

if (ioctl(0,TIOCGWINSZ,&ws)!=0) {
fprintf(stderr,"TIOCGWINSZ:%s\n",strerror(errno));

exit(1);
}

printf("row=%d, col=%d, xpixel=%d, ypixel=%d\n",
ws.ws_row,ws.ws_col,ws.ws_xpixel,ws.ws_ypixel);

return 0;
}

[ Szerkesztve ]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.