- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- Modern monitorokra köthető 3dfx Voodoo kártya a fészerből
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Milyen cserélhető objektíves gépet?
- ZIDOO médialejátszók
- Azonnali informatikai kérdések órája
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Autós kamerák
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Gaming notebook topik
Hirdetés
-
Agyi chipes gyártóba fektetett a kriptocég
it A Tether 200 millió dollárt fektet a Blackrock Neurotech agyi chipes vállalatba.
-
Már tudjuk, hogy mikor jön az idei Xbox Games Showcase
gp A showt egy külön Direct előadás követi, ami szinte biztosan az idei Call of Duty lelepelzése lesz.
-
Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
ph A cég megoldása centralizált vezérelhetőséggel, masszív radiátorral és robusztus ventilátorokkal igyekszik vásárlásra csábítani.
Új hozzászólás Aktív témák
-
Karma
félisten
A hiba ott kezdődik, hogy nem használtad a Programkód gombot a forrás beszúrásakor, és így amellett, hogy nehezen olvasható, a [i]-kből mindenféle sima zárójel és dölt írás lett. Erre figyelj oda legközelebb.
Maga a kód rengeteg sebből vérzik, jelölöm amit ránézésre látok:
scanf("%f", &adat->kapacitas); -- mivel a double érték skalár, a scanf függvénynek a címét kell átadnod, ki kell rakni a & operátort hogy ne robbanjon.
for(i = 0; i < (strlen(tomb)-1); i++) ☠-- strlent nem szabad ilyen tömbre használni, csak és kizárólag nullterminált (azaz C) stringekre! A függvényedet úgy kéne módosítanod, hogy a darabszámot is átadd paraméterként.
printf("%i",tomb[i].kapacitas); -- ha egyszer double az érték, miért egészként akarod kiíratni?
De egyébként például a középsőt a fordító is mondja neked, hiszen lefordíthatatlan; miért nem nézed a hibákat?
Egy kicsit lemaradtam az írással
[ Szerkesztve ]
“All nothings are not equal.”
-
Anakin007
aktív tag
Sziasztok!
Nem vagyok programozó, nem is értek hozzá, de úgy alakult, nagy szükségem lenne egy programra, amit viszont csak forrásban adtak meg tt.
Linux alatt nem fordul le, kismillió hibát jelez, nem tudtam kibogózni. win7-en a mingw-vel próbáltam, de annak is mindenféle header állományok hiányoznak, pl. wait.h, ptrace.h, stb. Valaki tudna esetleg segíteni a fordításban? V. más valamivel próbáljam? Annak is örülnék, ha valaki simán csak lefordítaná win-es binárisra, abszolút távol állnak tőlem ezek a dolgok, viszont kéne a program
A közzétevőnek már írtam, de még nem jött válasz.
Előre is kössz a bármit!Ha Isten létezne, hinnék benne.
-
Jester01
veterán
-
Anakin007
aktív tag
válasz Jester01 #4805 üzenetére
Köszönöm, a bináris működik, most is már azon a laptopon írok, amibe bios-t kellett újraírni, amihez kellett ez a progi
Igen, hiányzott a (asszem) libopenssl-dev csomag legutóbb, amiben az md5.h nevű file volt, amit hiányolt a gcc. Miután ezt is feltettem, már nem hiányolt semmit, csak kismillió hibát dobott és nem fordult le...
Mégegyszer köszönöm, lógok egy szivességgel. Tartsd evidenciában, főleg amikor majd meghal a notid[ Szerkesztve ]
Ha Isten létezne, hinnék benne.
-
alapz@j
tag
Na, megint jövök a kérdéseimmel Csinálgatok most egy kis programot, amihez több, külső forrásból való kódot használok fel. Olvasgattam a hozzájuk tartozó header fájlokat, és feltűnt, hogy olyan definíciók vannak a fájlok elején, hogy
(aes.h)
#ifndef AES_H
#define AES_H
...
#endif(sha256.h)
#ifndef SHA256_H
#define SHA256_H
...
#endifstb. Ezeknek pontosan mi a célja és értelme?
-
axioma
veterán
válasz alapz@j #4807 üzenetére
Konyhanyelven:
Hogy csak akkor legyen berakva, ha eddig nem volt. Mert hiaba ugyanaz, ha ketszer megjelenik pl. egy fg-fejlec, az nem derul ki ezen a szinten, hogy nem utkozest (kulonbozo megvalositast) jelent...
Effektive egy sajat "nemtobbszorozo" technika az, hogy minden egyes include-nal az adott file-hoz rendelt nevet define-oljak, illetve ha mashol meg az a define mar letezik, akkor elhiszik, hogy az include is megtortent. Termeszetesen ez csak akkor mukodik, ha szisztematikusan jol csinalod az egesz projekten vegig. -
buherton
őstag
válasz alapz@j #4807 üzenetére
Header-guardnak hívják. Az ok, amiért létezik azaz, hogy egy forrásból akaratlanul is többször hívódhat ugyanaz a header fájl*, ekkor minden, ami az adott header fájl tartalmaz az többször fog szerepelni. Ennek a fordítók nem igazán szoktak örülni.
* például: source.c-nek szüksége van foo.h-ra és bar.h-ra, igen ám de a bar.h-nak is szüksége van a foo.h-ra
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... !!!
-
nagyúr
while (!sleep) sheep++;
-
buherton
őstag
Egy picit egyszerűbb verzió. Bár ha az eredeti is ellátja a funkciót, akkor nem biztos, hogy kifog kopni ez az old-school megoldás. Nem is láttam még ezt a pragma-s verziót.
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... !!!
-
buherton
őstag
Mit takar a post-classical fordító kifejezés?
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... !!!
-
k.kristof
őstag
válasz buherton #4812 üzenetére
Valószínűleg azért, mert nem része a C szabványnak, ennek ellenére elég széles körben támogatott a Wikipedia szerint. Egyetemen C++-nál tanította a gyakorlatvezető, de azon kívül én se emlékszem, hogy láttam volna.
-
buherton
őstag
Valaki tud igazán durva C tesztet? Aminél még egy tapasztalt programozónak is vakarnia kell a fejét. Az a baj, hogy a neten találtam párat, de azok nem elég kemények. Lehetőleg ne a printf, fopen, fseek és társaira feküjdön rá, mert azt úgy sem használom, hanem a deklarálás, definiálás, inicializálás, pointerek legyenek lehetőleg.
[ 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... !!!
-
axioma
veterán
válasz buherton #4816 üzenetére
C-t akarsz tesztelni vagy algoritmust csak C-ben megvalositva?
(Ami kiguglizhato, az nem azert nem jo kerdes szigoruan szvsz, mert azt munka kozben is kiguglizza es hasznalja. Amit viszont o kell megalkosson... azt eleve tudnia kell.) Persze ha kodolas kell es nem az alkoto munka, akkor mind1.
Multkor egy konyvet neztem amit valaki ajanlott (de mikor mar elvi hibat is vetett a "megoldasban", nem csak elirast meg felesleges, de a megoldast nem zavaro koroket, akkor felreraktam), ott volt egy rakat linkelt listas feladat, ami pointeres, meg az adatszerkezetet is kitalalhatja hozza. Ilyen volt pl. hogy "korrupt" linkelt listaban (az utolso elem valami koztes elemre mutat) keresd meg konstans tarhely es ordo(N) muveletigennyel az elso ismetlodo elemet. De ehhez mar a trukkot kell ismerni (ordo(N^2) vagy felesleges bit per elem megengedesevel persze nem is nehez). -
buherton
őstag
Oké .
a[i] = i++;
Mit eredményez?
char foo[3] = "bar";
Mi lesz a tömbben?
char *string = "foo bar";
Miért nem módosítható pl. az első elem? Egyáltalán lefordul? Ha igen/nem miért?
typedef struct foo *BAR;
struct x
{
char c;
BAR ptr;
};Lefordul?
struct x
{
char c;
int i;
} foo bar;Lefordul? Ha igen/nem miért?
Az enum teljesen mértékben portábilis?
Az elsőről már hallottam, de még soha nem használtam (nem kellett még). Bevallom derekasan a középsőről nem hallottam még. Az object (.o) fájl (és mellé kerülnek egyéb fájlok, mint pl. a nagyon hasznos .lst is) a következő lépcső a preprocesszált fájl után, ami gyakorlati értelembe vett fordtási szakasz. A header fájlok alapján kívülről elérhetők az egyesek függvények, tömbök, változók, és egyéb szimbólumok, amit majd később a linket fog összekötözgetni. A linker már teljesen független a nyelvtől. Szimbólumokat kötözgeti össze és közben persze figyelembe veszi az egyéb fordítónak szóló utasításokat, amivel mondjuk linkelés során tovább lehet optimalizálni, függvényeket elhelyezni a memóriatérben, összecsomagolja pl. a struktúrákat (__attribute__(packed)) stb... Kimenete a bináris/hex (Intel, Motorola, stb...), .map (memória térkép, meg lehet nézni hogy az egyes függvények és társaik hol találhatók), .elf (debuggoláshoz kell). Azt tudni kell, hogy a forítás során utasítani lehet hogy az egyes program blokkokat egy egységként kezelje, aminek az eredménye, hogy a szorosan összetartozó object fájlokat már a fordítás során összelinkelni .a-fájlá. Az optimalizálás hatékonyabb, hogy ha két körösen fordítunk, ahol az első körben csak kielemzi az optimalizálási lehetőséget, majd második körben további optimalizációs lehetőségeket keres, majd fordít. Bár a tudásom megkopott, mert jó ideje nem kellett ezzel foglalkoznom.
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... !!!
-
buherton
őstag
Konkrétan a nyelv érdekel. Az algoritmusok után a google-ban utána tudok keresni. Köszi .
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... !!!
-
axioma
veterán
válasz buherton #4820 üzenetére
Ja, azt hittem fel akarsz venni munkatarsat, es ahhoz kell a teszt...
Konkretan a Siemensben anno ket honapon belul ketszer jutott el hozzam az a kerdes, hogy milyen rendezest kell alkalmazni (mire keressen ra a neten), ha egy kisebb es ritkan valtozo szamhalmazbol nagyon sokszor kell egy masik, surun valtozo szamhoz kivalasztani azt az elemet, amelyik a legnagyobb kezdoszelete. Ezt csinaljak a telefonkozpontok amikor intelligens szolgaltatasok vannak hozzarendelve (a maradek meg a szolgaltatas parametere). Oszinten kivancsi vagyok, hogy erre mit mond a gugli, mar persze ha nem vagod serobol a megoldast.
Termeszetesen nem tesztelni akarlak, csak egy egyszeru eletszagu peldat mondtam, ahol az algotudassal tobbre mentem (jelzem, tok veletlenul egy versenyekre felkeszito mindenen felul felvett oran hallottam... anelkul nem tuti hogy "kirakom"). Megvalositva egyebkent ket kulonbozo nyelven, tok mas programok reszekent lett.[ Szerkesztve ]
-
buherton
őstag
Munkáltató teszteken nem ilyen jellegű kérdések szoktak lenni, hanem írjon algoritmust és a fentebb írt szivatós kérdések.
(#4822) axioma: Ha jelentkezőt kellene tesztelni ahhoz lenne pár ötletem és akkor saját kútfőből, saját tapasztalatom alapján állítanám össze. A probléma, hogy most más állítja össze és én a másik oldalon ülök.
Például az enum-os kérdésem tapasztalatból jön. Adott volt egy enum tömb, amit használtunk 8- és 32 bites architektúrán is. A probléma ott kezdődöt, amikor memset-el 0-tól különböző értékkel próbáltuk inicializálni a tömböt.
MOD: eszembe jutott még egy. Ugye ezzel // egy sort lehet kikommentezni, vagy mégsem?
[ 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... !!!
-
buherton
őstag
Enum
A 8 bites architektúrán az enum 8 biten van ábrázolva, ami nem okoz gondot, ha memset-elni szeretnénk a tömböt hiszen az is bájtszintű. Viszont 32 bites architektúrán az enum 32 biten van ábrázolva, ami ugye 4 bájt. Ekkor ha deklarálsz egy tömböt, akkor egy tömb elem 4 bájt, viszont a memset továbbra is 1 bájtot állít. Így a 0 kivételével nem azt fogja csinálni, mint vártuk.
Komment
// komment \
komment \
komment \
komment vegeUgy hogy ovatosan a \-el, mert meg tud szivatni.
(#4825) k.kristof: nekem beágyazott rendszerek a területem, itt egy kicsit más várnak el.
MOD: eszembe jutott még egy
Az előbbi leforul, ez viszont nem fog:
// komment \
komment \
komment \
komment vegePróbáljátok csak ki .
[ 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... !!!
-
buherton
őstag
-
buherton
őstag
Van ötlete valakinek, hogy az uint8_t-nak a 32 bites fordító, miért foglal le 16 bitet? Bitfieldről van, amiben 8 bit van és uint8_t a típusuk. Az uint8_t önmagában véve 8 bites. Az attribute packed mahinálás nem működik.
MOD: nem teszt kérdés, őszintén nem tudom.
[ 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... !!!
-
alapz@j
tag
Szerintetek mi az oka annak, hogy a string.h függvényei char* paramétereket fogadnak és char* értékeket adnak vissza unsigned char* helyett, ami - szerintem - a logikus lenne?
-
k.kristof
őstag
Úgy látom még nem volt szó az Insane Coding blogról. C/C++ témakörben vannak jó írások, nemrég találtam a linket.
A legújabb a Memory management in C and auto allocating sprintf() - asprintf().
-
don_peter
senior tag
Srácok, hogy lehet egy előre beállított 8 bites értéket bejárni?
Tehát van egy ilyen beállított változom:
valtozo = 0b00011000;
Ezt szeretném úgy bejárni, hogy a nulláknál kiírja, hogy nulla, az egyeseknél, hogy egyes.
Előre is köszi a segítséget.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
kispx
addikt
válasz don_peter #4835 üzenetére
Nincs közelembe C fodító, de...
ha eltolod balra a biteket, akkor a legutolso helyen 0 vagy 1 lesz, tehat vagy paros vagy paratlan a szam. Ezt egy modulo kepzessel meg is lehet mondani.
if(bitek>>i % 2 == 0)
paros (0)
else paratlan (1)Szerk.:
nezopont kerdese, de szerintem mindketten forditott sorrendben fogjuk megkapni a biteket[ Szerkesztve ]
-
axioma
veterán
válasz don_peter #4835 üzenetére
1. ha felulrol akarod, akkor bitek >> (7-i) (vagy persze megforditod a for ciklust, de akkor fiygelj hogy ne unsigned legyen, mert akkor a >0 mindig igaz)
2. a letolassal csak az also biten lesz az, amit akarsz, de felette maradtak tovabbi bitek! Ket lehetoseged van (kb. ugyanaz lesz gepi kodban ha jo az optimalizacio): vagy vizsgalod ennek a 2-es maradekat (%2), vagy szo szerint nezed az utolso bitet (bitwise and -del, azaz &1), es persze igy mar vizsgalhatod az egyenloseget az 1-gyelszerk. upsz de lassu vagyok...
[ Szerkesztve ]
-
-
Jester01
veterán
-
don_peter
senior tag
válasz Jester01 #4840 üzenetére
Igen, igen...
Tudtam, hogy miért nem jó a kódom, csak azt nem tudtam, hogy oldjam meg az egyes helyi értékek vizsgálatát anélkül, hogy az megváltozna.
Ettől független köszönöm a magyarázatot.Egyébként egy HandClock vagy, ha jobban tetszik WandClock-nak nevezett kézi kütyüt készítettem a magam szórakoztatására és persze tanulás céljából és ehhez kell egy jobb hatásfokkal dolgozó kódot írnom, amely mátrixos multiplexeléssel rakja ki függőlegesen feltörve az egyes bitek értékeit a proci lábaira.
Sajnos a mostani kódom ugyan működik, de nem tökéletes így muszáj fejlesztenem még rajta, de már a PIC memóriáját 97%-ra tele írtamItt van egy kép majd egy két videó a kütyüről:
És a videók: DPTP System - WandClock 1.0
DPTP System - WandClock 2----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
Jester01
veterán
válasz don_peter #4841 üzenetére
Mikrokontrolleren számíthat, hogy >> i vagy >> 1 mert előbbi lehetséges, hogy csak egy ciklusban, egyesével valósítható meg. A kiírást tehát célszerű úgy csinálni, hogy csak egyet léptetsz, az értéket (ha módosítható) vagy a maszkot.
for(i=0; i<8; i++, bitek >>= 1) {
if (bitek & 1) {
...
}
}Bizonyos esetekben a visszafelé futó ciklus is kisebb/gyorsabb lehet.
Jester
-
don_peter
senior tag
válasz Jester01 #4842 üzenetére
for ciklusban még nem adtam meg 4. feltételt, de lehet majd kipróbálom.
A mostani kódom így néz ki://void karakter(char betu){
char i, x, y=4, z;
for(z=0; z<40; z++){
for(x=0; x<7; x++){
for(i=0; i<5; i++){
if((ABC[z][x]>>y)&1 == 1){
printf("o");
}else{
printf(".");
}
y--;
}
y=4;
printf("\n");
}
}
//}Lényege, hogy mindegyik byte első bit-jét kell kiraknom portra, vagy is, hogy 7bit-et kapjak függőlegesen.
A 7 bi-tet a 7 byte első bitjei teszik ki azért 7 bit mert 7db ledet kell kapcsolgatnom.
Vízszintesen pedig 5 bit kell jelen pillanatban, de ez ügye 8-ig gond nélkül növelhető.
Azért csak 5 mert 7x5-os a szabvány.
A függvényt úgy kell majd megírjam, hogy oda vissza ki tuja tenni a biteket.
Tehát mikor lendítem a karom akkor kapcsol a gyorsulás kapcsoló és elindul a program, mikor a lendítés eléri a holtpontot és visszafordul akkor váltani kell a programnak és az ellentétes oldalról kell végig léptetni e a biteket, így kapnék egy teljesen jó és egyletes kijelzést.
Persze itt az időzítés és a lendítés sebessége nagyon fontos.
Nem tudom mennyire volt érthető amit akartam mondani----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz Jester01 #4846 üzenetére
Elvileg igen
Kukk meg:void karakter(unsigned char karakter){
unsigned char i, z;
unsigned char mask = 0x10;
for(i=0; i<7; i++){
for(z=0; z<5; z++){
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
mask >>= 1;
}
mask = 0x10;
printf("\n");
}
}----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz Jester01 #4848 üzenetére
Tetszik mert kisebb memória kell neki
Köszi kicserélem illetve mutatom az egészet kompletten//A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - : .
static char ABC[40][7] ={{0b00000,//A
0b01110,
0b10001,
0b10001,
0b11111,
0b10001,
0b10001}
};
unsigned char karakteratvalto(unsigned char karakter){
static char chars[40] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-:. ";
unsigned char i, result;
for(i=0; i<40; i++){
if(karakter == chars[i]){
result = i;
break;
}
}
return result;
}
void karakter(unsigned char karakter){
unsigned char i, z;
unsigned char mask = 0x10;
for(i=0; i<7; i++){
for(z=0; z<5; z++){
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
mask >>= 1;
}
mask = 0x10;
printf("\n");
}
}Így néz ki a teljes kód.
Az ABC az végig van írva rendesen úgy ahogyan látod a kommentált részben is.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
buherton
őstag
válasz don_peter #4849 üzenetére
Mennyi RAM és flashed van? A static tömböket rakhatod a flashre is ha nincs elé RAM-od (compiler manualt kell megnézni). A számokat pl. a tömb méret for ciklus meddig menjen, azokat ajánlott #define-olni. Ez sem rossz forma mask = 0x10;, de ez olvashatóbb mask = (1<<4) és nem foglal több helyet, mert a fordító az ilyeneket kiszámolja. mask >>= 1; ez is inkább így mask = (1<<(z + 4));, mert ebből a sorból már látod, hogy a 4. bittől fölfelé akarod a biteket elérni és nem kell még feltekeni, hogy mi is volt a kiinduló érték. De ez minden rajtad, csak az olvashatóságon szeretnék segíteni.
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... !!!
-
don_peter
senior tag
Ezt a függvényt szeretném egyszerűsíteni:
A lényege, hogy kap egy karaktert és egy irany változót.
Ha az irany = 0, akkor balról-jobbra vagy is normálisan írja ki a karaktert, de ha az irany = 1, akkor jobbról-balra írja ki a karaktert.
Így:
.....
oooo.
o...o
oooo.
o...o
o...o
oooo.
.....
.oooo
o...o
.oooo
o...o
o...o
.ooooA kód:
void karakter(unsigned char karakter, unsigned char irany){
unsigned char i, mask;
for(i=0; i<7; i++){
if(irany == '1'){
for(mask=0x01; mask != 0x20; mask <<= 1){
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
}
}else{
for(mask=0x10; mask != 0; mask >>= 1){
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
}
}
printf("\n");
}
}Előre is köszi...
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
moseras
tag
válasz don_peter #4852 üzenetére
Üdv!
Talán egyszerűbb:
void karakter(unsigned char karakter, unsigned char irany){
unsigned char i;
unsigned char normal = (irany == '0');
unsigned char mask_end = normal ? 0 : 0x20;
unsigned char mask;
for(i=0; i<7; i++){
mask = normal ? 0x10 : 0x01;
while (mask != mask_end) {
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
if(normal) {
mask >>= 1;
} else {
mask <<= 1;
}
}
printf("\n");
}
}Imi.
-
don_peter
senior tag
Ismét elakadtam, kérném segítségeteket.
Van egy rohadt nagy tömböm ami így néz ki://A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - : .
static unsigned char ABC[40][7] ={{0b00000,//A
0b01110,
0b10001,
0b10001,
0b11111,
0b10001,
0b10001},
{0b00000,//B
0b11110,
0b10001,
0b11110,
0b10001,
0b10001,
0b11110}, ...};P18F684-es chip-el dolgozom aminek csak 128byte adatmemóriája van.
A kérdésem az lenne, hogy van e mód egy 280byte-os területű tömb használatára?
Vagy, ha ennek esélye nem sok, milyen módon tudnám kikerülni, hogy ne foglaljon le ekkora területet?
Vagy egy hatékonyabb megoldás elmélete is érdekelhet.
Most egy switch() elágazással oldottam meg, de ez véleményem szerint nem hatékony, nem mellesleg zabálja a program memóriát.
Előre is köszi..----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
moseras
tag
válasz don_peter #4855 üzenetére
Üdv!
Ha
static const unsigned char ABC[40][7]
írsz, akkor (legalábbis régebben így volt) a FLASH-be, vagyis a program memóriába teszi a tömböt. Tehát fontos a const módosító. Mivel ezt te csak olvasod, ezért neked ez így megfelelő. Bár nem tudom, hogy milyen C fordítót használsz, de a Microchip PIC18-as fordítója régebben const módosító esetén a FLASH-be tette.
Imi.
[ Szerkesztve ]
-
don_peter
senior tag
-
don_peter
senior tag
válasz moseras #4858 üzenetére
Az új programmal már kicsit dinamikusabban lehet állítgatni a kiírandó szövegeket
Videó róla: DPTP System - WandClock 3----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz moseras #4860 üzenetére
A printf() nem használható PIC (mikrokontroller) programozásnál kivéve, ha LCD-re akarok kiírni valamit.
Mos a printf() helyett a PIC egyes portjaira és azon belül egyes bit-jeire küldöm ki az utasítást.
Tehát a printf() helyett ez van:
LED1 = ABC[karakter][6]>>mask;
LED2 = ABC[karakter][5]>>mask;
...stb[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz moseras #4862 üzenetére
Nem igazán értem a kérdésed, de megpróbálok következtetni és, ha nem jó akkor újból rákérdezel.
Az RS232 az ügye a soros port.
PIC mikrovezérlőknél ezt SPI (serial peripheral interface) porton keresztül érhetjük el amelyre 1byte-os adatcsomagokba küldhetünk és fogadhatunk adatokat.
A printf() utasítás itt sem játszik. (PIC-nél legalább is erre külön rutint kell írni)----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
moseras
tag
válasz don_peter #4863 üzenetére
Üdv!
Szerintem RS232 != SPI. Van olyan, hogy HW-es RS232, HW-es SPI, HW-es I2C, HW-es CAN, stb., de ezek egymástól függetlenek. Típustól függően vagy ez, vagy az, vagy akár mind a 4 is lehet egy kontrollerben. Sőt, akár több RS232 és/vagy SPI is lehet egy-egy kontrollerben (persze itt a nagyobbakra gondolok). Szóval szerintem az RS232 teljesen független az SPI-től. Pl. a te kontrolleredben nincs RS232, de van benne 1 SPI és 1 I2C. De pl. a PIC16F1704-ben már van 1 db RS232.
Lassan offtopic leszek...
Imi.
-
buherton
őstag
válasz don_peter #4861 üzenetére
Egyes fordítók támogatják a stream-ek redefiniálását. Az avr-gcc-ben pl. pont soros porti küldésre használom a printf-et.
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... !!!
-
buherton
őstag
válasz don_peter #4863 üzenetére
Az RS232 aszinkron, az SPI szinkron ráadásul az előbbinél működik az egy irányú kommunikáció az utóbbinál kétirányú forgalom kötelező. Amire te gondolsz azaz UART, USART vagy USI. Lábnevek: Rx és Tx. Mint már fentebb írtam, hogy a stream redefiniálással lehet ügyködni, ha támogatja a fordító, és pont alkalmazható, mert a C ASCII alapú, ami 1 byte széles, és a soros porttól kezdve, minden periféria byte alapú.
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... !!!
-
buherton
őstag
válasz don_peter #4867 üzenetére
Íme. Kipróbálás rád marad, mert nekem nincs mega felszerelésem. Viszont készülj fel, hogy ezek általában sok flasht igénylő műveletek.
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... !!!
-
don_peter
senior tag
válasz buherton #4869 üzenetére
Úgy nézem, hogy az LCD vezérlés pont így működik.
Nem kevés sort kell hozzá legépelni
Egyelőre nincs rá szükségem így addig nem is feszegetem a témát.
Csak ésszel adagolom magamnak a dolgot, hogy legyen friss hely és, hogy meg is maradjon az agyamba
Köszi a feltárást és a kiigazítást.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
zka67
őstag
Sziasztok, egy kis segítségre lenne szükségem:
C-ben hogyan tudom azt megoldani, hogy egy 8 bites tömb elemeit tudjam írni és olvasni 16 bitesként is?
Valami ilyesmire gondoltam, csak ez nem működik, bár a fordító nem jelez hibát:
uint8_t zreg[8];
#define C zreg[0]
#define B zreg[1]
#define BC (uint16_t)zreg[0]
...
BC += 1;A segítségeteket előre is köszönöm!
-
moseras
tag
Üdv!
uint8_t zreg[8] = {0,0,0,0,0,0,0,0};
#define C zreg[0]
#define B zreg[1]
#define E zreg[2]
#define D zreg[3]
#define BC (uint16_t*)&zreg[0]
#define DE (uint16_t*)&zreg[2]
int main(int argc, char**argv)
{
int i;
*BC += 852;
*DE += 4500;
printf("BC: %d, DE: %d\n", *BC, *DE);
printf("zreg: ");
for (i = 0; i < 8; ++i) {
printf("%d ", (int)zreg[i]);
}
printf("\n");return 0;
}Eredmény:
$ gcc -o 1.exe 1.c; 1.exe
BC: 852, DE: 4500
zreg: 84 3 148 17 0 0 0 0Imi.
[ Szerkesztve ]
-
buherton
őstag
válasz moseras #4872 üzenetére
Ahogy írtad úgy nem fordul. Így a helyes gcc asd.c; ./a.out (-o kapcsoló nem kell, csak ha saját nevet akarsz a binárisnak adni), de előtte az a.out-ra kell egy executable bitet rakni a usernek.
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... !!!
-
moseras
tag
válasz buherton #4874 üzenetére
Üdv!
MinGW/msys/Windows alatt működik. Az nem volt benne a kérdésben, hogy milyen rendszer alatt akarja futtatni, lehet mikrokontroller, Windows, Linux, Mac, BSD, akármi más. Egyébként is csak a a kimenet demonstrálása miatt írtam le, hogy mit ír ki, nem a fordítás menetét akartam megmutatni. Szerintem Ő van annyira képben, hogy le tudja fordítani az adott rendszerére a programot. Ha nem, akkor majd szól.
Imi.
-
Jester01
veterán
-
moseras
tag
-
axioma
veterán
válasz moseras #4878 üzenetére
En ugy gondoltam, hogy az union az tartalmaz egy uint8_t[8]-t es egy olyan strukturat, amiben benne van a 16 bites BC es DE (ha annyira kell mukodjon, mint te irtal), vagy eleve egy uint16_t[4] es akkor mindet eleri, es annak a BC, DE-re valo define-ja se lenne vallalhatatlan kavaras. Es pl. a bytetombot az eredeti indexelessel hasznalhatja, mig az egyesevel union eseten duplan kell (hanyadik strukt hanyadik - 0 v. 1 - byte-ja).
[ Szerkesztve ]
-
buherton
őstag
válasz moseras #4875 üzenetére
Felhívnám a figyelmedet erre: . Szarkasztikus kötekedést próbáltam jelezni ezzel, de úgy látom sikertelenül. No de, hogy tényleg kötekedjek, legközelebb $ helyett > használj, mert az előbbi az általánosab elfogadott user prompt jele Unix rendszereken. (hát ha most már érthetőbb )
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... !!!
-
buherton
őstag
válasz moseras #4878 üzenetére
Ez sajnos nem játszik, mert az uint8_t valójában 16 bitet "foglal" ki, amit csak #pragma-val vagy attribute-al lehet alignolni 8 bitre. Ezt viszont nem szarkazmusból mondom, mert a jó múltkorában ez okozott komoly fejfájást a 32 bites PowerPC-n.MOD: Tömb... Áh, a fene este van, és azt hiszem inkább csöndben maradok.
[ 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... !!!
-
don_peter
senior tag
Srácok, készítettem egy kék LED-es változatot az új programmal amelyben a segítségeteket kértem.
DPTP System - HandText Blue
Jó szuperál az új program, sokkal hatékonyabb és gyorsabb mint az első változat.
Itt már jól láthatóan elkülönülnek a LED-ek egymástól nem úgy mint az elsőnél.
Pixelesebb.Itt két kép az összehasonlítás kedvéért:
Az első változat:
És a mostani új hatékonyabb és gyorsabb változat:
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
Rólam és a C nyelvről illetve egy kütyümről. Cikk
Gondoltam érdekelhet titeket is
Tisztelettel és jó szível ajánlom.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
Újabb cikkem amit tisztelettel ajánlok mindenikek.
Amikor a hardver és a szoftver találkozik 2. rész - DPTP System - HandText[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
#68216320
törölt tag
Alap problémám akadt. Ékezetes karaktereket szeretnék bevinni és kiírni. Az alábbi leegyszerűsített kódal próbáltam, de az 'á' betűvel kezdődő szavakból lemarad az első betű. pl. állomás -> llomás. Az 'ékezet' szót kiírja hiba nélkül. Mit szúrok el?
#include <wchar.h>
int main()
{
wchar_t string [40];
wscanf(L"%ls",string);
wprintf(L"String: %ls", string);
return 0;
} -
anddrew
tag
érdemes megtanulni a c programozást könyvből?
π
-
zka67
őstag
Sziasztok, ismét elakadtam, így megint a segítségeteket kérem:
Nem tudom megoldani azt, hogy csak akkor olvasson be egy karaktert az stdin-ről, ha van karakter, magyarul ne várjon a karakterre, ha nincs.
while (1) {
if (checkInput()) doInput();
if (checkTimer()) doTimer();
}Itt a checkInput() a kérdéses, fogalmam sincs, hogy oldjam meg, hogy jelezze, ha van karakter az stdin-ben.
A segítségeteket előre is köszönöm.
-
#68216320
törölt tag
válasz Jester01 #4890 üzenetére
Meghívtam, de az volt a gond akkor, hogy kiírni a forrásból jól tudtam, de a beolvasáskor elvesztek az ékezetek.
A végső, de eléggé csúnya megoldás forrását feltettem ide.
Ezzel a beolvasás billentyűzetről hibátlan, de a kiirás forráskódból hibás volna. Viszont egy függvénnyel konvertálom az ékezeteket és ezzel kiirni is tudok rendesen. Valahogy nem sikerül egyszerűen a kiirás-beolvasás konvertálás nélkül.
Fura volt továbbá, hogy pl. az swprintf(szoveg,L"állomás"); nem tartalmazhatott ékezetet, csak akkor, ha utf8 volt a forrásfájl tárolása. Viszont ekkor macerássá váltak újra a karakterek, mindent wprintf()-el tudtam csak kiirni. A beolvasás viszont hibássá vált.
[ Szerkesztve ]
-
Karma
félisten
Nem próbáltam, de szerintem ez működhet.
Stdinen semmi se biztos mondjuk.Nyilván hülyeséget írtam, a getc alaphelyzetben blokkol, ha nem tud karaktert olvasni; ezt felülbírálni meg nem lehet platformfüggetlenül...
[ Szerkesztve ]
“All nothings are not equal.”
-
don_peter
senior tag
válasz Ereshkigal #4889 üzenetére
Szívből ajánlom:
Stephen G Kochan - Programfejlesztés C nyelvenVannak benne leckék is.
Én ezt végigolvastam és a példa programokat is begépeltem amelyek sokban segítenek a megértésben.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
Jester01
veterán
válasz #68216320 #4894 üzenetére
A forrásfájl kódolása tetszőleges lehet és független a futásidejű kódolástól. Az aktuális locale beállításból jön, alapértelmezése pedig utf8. Persze meg is lehet adni a fordítónak, gcc esetén a -finput-charset kapcsolóval.
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
const wchar_t* text = L"árvíztűrő tükörfúrógép";
wchar_t buf[40];
setlocale(LC_ALL, "");
wprintf(L"Írd be, hogy %ls: ", text);
fgetws(buf, 40, stdin);
buf[wcslen(buf) - 1] = 0;
wprintf(L"Ezt írtad be: \"%ls\", %ls\n", buf,
wcscmp(text, buf) ? L"nem egyezik" : L"egyezik");
return 0;
}$ file test-utf8.c
test-utf8.c: C source, UTF-8 Unicode text
$ gcc -finput-charset=utf8 test-utf8.c
$ ./a.out
Írd be, hogy árvíztűrő tükörfúrógép: árvíztűrő tükörfúrógép
Ezt írtad be: "árvíztűrő tükörfúrógép", egyezik
$ iconv -f utf8 -t iso8859-2 < test-utf8.c > test-latin2.c
$ gcc -finput-charset=iso8859-2 test-latin2.c
$ ./a.out
Írd be, hogy árvíztűrő tükörfúrógép: árvíztűrő tükörfúrógép
Ezt írtad be: "árvíztűrő tükörfúrógép", egyezikMégegyszer, röviden: a forrás tetszőleges kódlappal lehet, ha azt megmondod a fordítónak. Futásidőben pedig a setlocale megfelelő használata szükséges. Ennyi.
Jester
-
#68216320
törölt tag
-
#68216320
törölt tag
válasz Ereshkigal #4901 üzenetére
Ezt tapasztaltam én is.
-
Hani
aktív tag
Uraim!
El vagyok keseredve.
Jó 10 év után újra elővettem a C-t, gyorsan átfutottam pár nap alatt az egészet és arra kellett rájönnöm, hogy valahol elhagytam az agyam, mert akkoriban még egész jól ment, most meg alapvető dolgokat nem értek. Persze az is lehet, hogy mindig is hülye voltam, csak akkoriban nem jöttek elő ezek a kérdések... nem tudom, mindenesetre segítséget kérek, mert magamtól nem megy és a google sem a barátom ezekben (és még egy rakás másban sem, de most ezek jutottak hirtelen eszembe):1. Van egy olyanom, hogy
int a = 1, b = 1, d = 1;
printf("%d, %d, %d", ++a + ++a + a++, a++ + ++b, ++d + d++ + a++);
Kérdés, hogy mit ír ki? A megoldás: 15, 4, 5. De miért?
2. Legyen egy long int-em:
long int li = 12345L;
Miért kell nekem az 12345 végére az L betű? A fordítónak jelzem, ha nem lenne elég, hogy odaírom, hogy long? Saját magamnak jelzem, nehogy elfelejtsem a típust? Egyéb?3. scanf és az ő filterezése.
Elvileg lehet olyat, hogy scanf("%[0-9a-fA-F]", &akarmi), hogy csak számokat és a-f / A-F karaktereket olvashasson be. Nekem mégsem megy, sem a komplementer változata ^0-9... verzióban. Mit rontok el?4. Pointeres változók.
Miben különbözik az int* i és az int *i ? Van egyáltalán bármi? Mondjuk ezt közben pont megtaláltam, miközben írtam, úgyhogy sztornó (a válasz itt)5. enum-ok.
Legyen két felsorolásom:
enum birds {SPARROW, PEACOCK=5, PARROT};
enum animals {TIGER = 8, LION, RABBIT, ZEBRA};enum birds m;
m = LION; //Ezt elvileg nem lehetne, de mégis lehet. Miért?
Szóval én eddig azt hittem, hogy ha van egy enum típusú változóm, akkor azokat az értékeket adhatom neki, amik a felsorolásban szerepelnek, de úgy tűnik, mégsem. Valahol elvesztettem a fonalat.+1. Nagybetűsíteni szeretnék egy stringet egy függvénnyel: megkapni paraméterben és visszaadni a nagybetűs verzióját. Erre több megoldás is lenne, de valahogy egyik sem az igazi:
- valamiért nem viszi a sima strupr()-t, ráadásul az az eredeti változót változtatja meg, ami nem oké. Csinálnék helyette egy másikat, de vagy kell hozzá globális változó, vagy nem ideális a memóriafelhasználás, vagy megváltoztatja az is az eredeti paramétert... Hogy kéne ezt normálisan?
Amikkel próbálkoztam, azok ezek:void upper_string(char *string)
//Ez már megy, de ez is megváltoztatja az eredeti paramétert, ugye.
{
while(*string)
{
if ( *string >= 'a' && *string <= 'z' )
*string = *string - 32;
string++;
}
}Lehetne olyan, hogy:
char* upper_string2(const char *string)
{
int i=0;/*
Namármost. Vagy definiálok egy globális char copystr[]=""; változót és annak a címét használom,
vagy definiálunk itt egy olyat, hogy char copystr[(strlen(string)]=""; , ami viszont lokális változó,
és nem jó ötlet lokális változó címét visszaadni a függvényen kívülre; vagy csinálunk egy static változót
itt helyben, aminek viszont méretet kell adni, amit nem lehet csak úgy strlen-nel. Én ezt az utóbbit választom, mondjuk 255-ös hosszal, de hát ez is milyen már.
*/static char copystr[255]; //Lehetne ez [65535] is akár.
strcpy(copystr, string);while(string [ i]!='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string(i) >= 'a' && string(i) <= 'z' )
copystr(i) = string(i)-32;
i++;
}
return copystr;
}Vagy lehetne simán ez is, de ez is megváltoztatja az eredeti változómat:
char* upper_string3(char str[])
{
int i=0;while(str(i) !='\0')
{
if ( str(i) >= 'a' && str(i) <= 'z' )
str(i) = str(i)-32;
i++;
}
return str;
}Szóval van baj, nem tudom, hogy mikorra állnak vissza a fejemben a dolgok, de elkelne egy kis segítség.
[ Szerkesztve ]
-
buherton
őstag
1.
Ezt ne is próbáld megfejteni, mert unspecified az inkrement és dekrement kiértékelési sorrendje ilyen esetekben.2.
Nem szükséges az L, mert a fordító castolni fogja, de ajánlott, mert így szép.3.
Ilyenekkel ki lehet kergetni a világból . Az elmúlt 4 évben egészen biztosan nem írtam le még gondolatban sem a scanf-t .4.
Nincs különbség. Az utóbbit ajánlatos használni, mert nem típus, hanem a változó lehet pointer.5.
Lehet, mert az enum egy számot reprezentál, viszont nem ajánlatos íly módon használni, mert nagyon megtudja keverni az embert.+1.
Erre van egy uppercase vagy milyen standard függvény.[ 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... !!!
-
Hani
aktív tag
Az előző végén persze nem figyeltem és átváltoztatta nekem a [ i ] -jeimet (i)-re meg jó kis dőlt betűre, szóval az utolsó rész még egyszer:
static char copystr[255];
strcpy(copystr, string);while(string[ i ] !='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string[ i ] >= 'a' && string[ i ] <= 'z' )
copystr[ i ] = string[ i ]-32;
i++;
}
return copystr;
}illetve
char* upper_string3(char str[])
{
int i=0;while(str[ i ] !='\0')
{
if ( str[ i ] >= 'a' && str[ i ] <= 'z' )
str[ i ] = str[ i ]-32;
i++;
}
return str;
} -
Jester01
veterán
1. nem lehet tudni mit ír ki, mert nem definiált működés
2. itt nem kell az L, akkor kellene esetleg ha műveleteket végzel vele ami túlcsordulhat
3. nem tudjuk ennyiből megállapítani
5. a C ilyen buta
+1. ha nem az eredetit akarod módosítani, akkor foglalj dinamikusan memóriát (malloc)buherton:
[ Szerkesztve ]
Jester
-
Hani
aktív tag
válasz buherton #4904 üzenetére
Wow, ez gyors volt.
Az 1.-nél hasonló gondolatra jutottam én is, aztán negyed óra anyázás után szétszedtem külön átmeneti változókra, de azért izgatja a fantáziámat... ami könyvet meg fellapoztam, mind csak az egyszerűbb részeket mutogatta, ++i, i++, aztán annyi.2. Pöpec. Megcsinálni szívesen megcsinálom, ha így szokás, csak zavar, ha nem tudom az okát.
3. Mivel lehet akkor jól beolvasni a usertől mindenfélét? Illetve ha már itt vagyunk, akkor eszembe jut a getchar is, hogy a Jóistennek sem sikerül beolvastatnom vele egy Entert vagy Escape-et (mondjuk hogy arra kilépjen) - q-t igen, vagy más szép karaktert, de ezeket nem szereti.
4. Volt ennek valami furább verziója, talán int *const p / int const* p / const int* p / int const * const p, de ez is közben tisztázódik az órajárásos megoldással, szép lesz ez.
5. Kár, pedig szép lenne egy beépített szűrő
6. Utánakeresek akkor.
-
Hani
aktív tag
válasz Jester01 #4906 üzenetére
Köszönöm ezt is.
2. Akkor ezek szerint gyakorlati haszna is van.. akkor mindenképpen odaírom.
A scanf-nél mondjuk ha az lenne a feladat, hogy csak számokat olvashat be, akkor mit kéne tennem? Vagy ne használjam a scanf-et, hanem mondjuk while-lal addig kérjem be a dolgokat, amíg megfelelő inputot nem kapok?
mallocnak utánaolvasok azonnal.
-
alapz@j
tag
válasz Ereshkigal #4901 üzenetére
-
#68216320
törölt tag
-
alapz@j
tag
válasz #68216320 #4915 üzenetére
Viszont végre jól működik a program, mert az 'á' megjelent - még ha helytelen kódolással is - a feldolgozott sztringben Egyébként ebből is látszik, hogy ez inkább konzol (terminál) probléma, mert a default 852 kódlappal ugyanaz az exe nálam is megeszi a szó eleji á-t.
[ Szerkesztve ]
-
zka67
őstag
Sziasztok,
Nem tudom megoldani azt, hogy csak akkor olvasson be egy karaktert az stdin-ről, ha van karakter, magyarul ne várjon a karakterre, ha nincs.
while (1) {
if (checkInput()) doInput();
if (checkTimer()) doTimer();
}nos azt hiszem, sikerült megoldanom a problémát:
void ???func(void *parm) {
pthread_mutex_lock(&mutex);
...
pthread_mutex_unlock(&mutex);
sched_yield();
return NULL;
}
int main(int argc, char **argv) {
pthread_t threadid, inputid;
char f;
f = 1;
while (1) {
pthread_mutex_lock(&mutex);
pthread_create(&threadid, NULL, threadfunc, NULL);
if (f) {
f = 0;
pthread_create(&inputid, NULL, inputfunc, NULL);
}
usleep(10);
pthread_mutex_unlock(&mutex);
pthread_join(threadid, NULL);
pthread_mutex_destroy(&mutex);
}
}ahol az inputfunc a doInput() és a threadfunc a doTimer()
Magyarul, két külön szálon fut a két funkció.
A program alapját a neten találtam, és egyenlőre fogalmam sincs, hogy a pthread_xxx-ek mit is csinálnak pontosan, de a program az elvárásoknak megfelelően működik.
[ Szerkesztve ]
-
Hani
aktív tag
Sziasztok,
újra gondom van, pontosabban egy régi dolog jött fel újra.
Egyszerű a feladat: 1 és 5 közötti számokat kell beolvasnom. Azt gondoltam, hogy megoldom ezzel:#include <stdio.h>
int main() {
int i;
do
{
printf("Adjon meg egy szamot 1 es 5 kozott:\n");
scanf("%d", i);
fflush(stdin);
if ((1>i) || (5<i)) printf("A megadott adat nem 1 es 5 kozotti szam.\n");
} while ((1>i) || (5<i));
printf("A megadott szam: %d\n", i);
return 0;
}A program megy, ha mondjuk 4-et ütök be. Működik akkor is, ha mondjuk 44-et ütök: kiírja, hogy hibás és újra kéri. De ha nem számot ütök be, hanem mondjuk egy k betűt, akkor végtelen ciklusban elkezdi kiírni, hogy "Adjon meg egy szamot 1 es 5 kozott:
A megadott adat nem 1 es 5 kozotti szam." ,Mindezt beolvasás nélkül, hiába az fflush.
Kérdés, hogy mit nézek el? Hogyan kell normálisan bekérni 1 és 5 közötti számokat?
-
Jester01
veterán
A beolvasás egyszerű feladatnak tűnik, mégis meglepően bonyolult jól csinálni.
Az fflush(stdin) nem szabványos, vagy működik vagy nem. Az ajánlott módszer teljes sorok olvasása fgets használatával, majd a beolvasott sor számmá alakítása strtol segítségével. A helyes megoldás a sor olvasásnál kezeli a túl hosszú sorokat, és az átalakítás után ellenőrzi, hogy maradt-e még feldogozatlan karakter.
Ennél egyszerűbb megoldás, ha az fflush(stdin) helyett egy fgetc(stdin) ciklussal kiolvasol mindent a sor (vagy a bemenet) végéig.
Az is rossz a kódban, hogy a scanf visszatérési értékét nem ellenőrzöd. Ha ugyanis nem számot írnak be, akkor nem tud mit konvertálni és az i értéke változatlan marad. Azt pedig nem is inicializáltad, tehát bármi lehet. Ha véletlenül 1 és 5 közé esik akkor a programod kilép a ciklusból.
[ Szerkesztve ]
Jester
-
Hani
aktív tag
válasz Jester01 #4921 üzenetére
Köszönöm, megpróbálom akkor ezek szerint.
Még egy kérdés: ha normálisan akar C-ben programozni az ember, akkor milyen programot érdemes használni? Eddig a notepad -> notepad++ -> Eclipse+Cygwin utat jártam be, de mindegyiknek megvoltak a maga bajai. Van olyan keretrendszer, ami különösen ajánlott, vagy bármelyik jó, csak szokjak hozzá a sajátosságaihoz?
-
bucsupeti
senior tag
Előszöris az igazzy C programozó, valamiféle Unix féle rendszert használ, természetesen c-shellel
De komolyra fordítva a szót. Szerintem először célszerű átlátni hogy a programozás egyes fázisaiban mi is történik, milyen programokat és miért kell futtatni. (szerkesztés, fordítás, futtatás, hibakeresés) Ezeket a részleteket az integrált fejlesztői környeztek jól eltakarják, ezzel "egyszerűsítve" a programozást.
Szóval az IDE-k használata (pl. Dev-C, Code-Blocks, Visual Studio, Netbeans, Eclipse) szerintem csak akkor jó ötlet ha tudod mi történik és hogyan. Ha ez a lépés kimarad akkor nagyon sok minden bonyolultnak, érthetetlennek tűnhet.Később valamelyik professzionális IDE megismerése mindenképp javasolt. Én az Eclipse mellett döntöttem, de van más lehetőség is.
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
alapz@j
tag
A NotePad++ és a Cygwin alapján feltételezem, hogy Windows OS alatt programozol - ebben az esetben a legújabb Microsoft Visual C Express-t vagy a PellesC-t ajánlanám, mindkettő ingyenes és nagyon jó fejlesztői közeg, ez utóbbi teljesen C11 konform és a resource editor is teljes benne (pl. van dialog builder, ami az msvce-ből pl. hiányzik).
-
buherton
őstag
Tapasztalatból mondom, hogy a Cygwin Eclipse páros nagyon sok szenvedést okoz.
Ha Linuxra akarsz fejleszteni, akkor virtualbox vagy tedd fel natívba. Ha ragaszkodsz a GCC-hez, akkor min-gw + Eclipse, viszont ekkor windows-os környezetet kell haszálnod.
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... !!!
-
Hani
aktív tag
bucsupeti, alapz@j, buherton:
Köszönöm az infókat. Kipróbálom őket, aztán kiderül - egyelőre mondjuk csak egyszerű, banális kis jószágokat gyártok, amihez akár egy online fordító is oké, csak a lépésenkénti futtatást / debugot hiányolom különösebben, hogy jobban lássam, hogy éppen mi történik.
-
don_peter
senior tag
C-ben írt programom lassan testet ölt... pár kép róla:
KB. 3 hónapos fejlesztés eredménye kezd körvonalazódni..
Ha nem látszana akkor elmondom, hogy ez egy levegős forrasztó gép amelynek a vezérlését C-ben programoztam le..
Nem szorosan tartozik ide, de mivel sokat tanultam tőletek szívesen mutatom meg miket készítek..
Remélem nem veszitek zokon...----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
Uraim...
Van egy kis problémám.
Van egy programmemóriába létrehozott tömböm és ebből szeretnék kiíratni.
A következő képen néz ki:rom static unsigned char szovegek[14][19] = {
{'P','r','o','f','i','l',' ','n','e','v',':'} //, ...stb sorok
};
//A kiíratást meg így
printf("%s", szovegek[i]);Az i természetesen növekszik.
Ha nem a rom-ba teszem hanem simán a memóriába akkor menne, de akkor meg a hely kevés..
Azért van szükség erre a tömbre mert szeretnék helyet spórolni...
Előtte switch() elágazással csináltam, de az zabálja a memóriát.
Előre is köszi...----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
Nem ír ki semmit.
Ha nem a ROM-ba teszem akkor meg simán kiírja a tömb tartamát.Tehát így kiírja a tartamát:
static unsigned char szovegek[14][19] = {
{'v','a','l','a','m','i',' ','h','e'}
}
printf("%s", szovegek[0]);[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz don_peter #4930 üzenetére
Közben megoldódott a probléma..
Nagyon egyszerű volt és ezért volt nehéz
Álljon itt a példa:printf("%s", valtozo[0]); //kiíratás sima srting egy tömbből
printf("%S", valtozo[0]); //kiíratás program memóriában tárolt (ROM) srting egy tömbből
l
Ennyi .. az a fránya "%S"...----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
alpihun
senior tag
Hali!
Nagyon alapszintű c++-os problémám akadt, többszöri átnézés után sem kapom a hibát.
Nem is csúfítanám a fórumot vele, aki tudna ésvagy hajlandó rápillantani a kódra az írjon egy privátot s elküldöm.
Ha megoldódik, akkor azt itt is jelzem majd.Bagoly mondja verébnek, hogy nagy a feje, búsuljon a ló.
-
alpihun
senior tag
Nem a hosszával van a baj.
Csak nagyon csúf az az első ~20 sor és nem akartam magyarázkodásba kezdeni vele. Röviden annyi, hogy két sorban meg lehetne oldani azt vektorral, csak még nem tanultuk suliban, netről ellesni meg +1 hibalehetőség, megkérdezem hétfőn a tanárt (ezek érettségi feladatok és most kezdtem a tízet blabla kitérdekel), addig is megteszi ez a tömb, aminek rossz esetben is csak kevéssel van több eleme a szükségesnél.
Szóval ha működne a dolog, akkor kiírná a legtöbb egymás melletti egyforma számok számát a beolvasandó fájlból, aminek a tartalma:
32 45 56 34 34 34 34 55 11 11 11 11 11 11 12
plusz a részsorozatot, tehát:
6
11 11 11 11 11 11
Viszont nem ezt csinálja. Hol a hiba?[ Szerkesztve ]
Bagoly mondja verébnek, hogy nagy a feje, búsuljon a ló.
-
Kosztinho
tag
válasz alpihun #4934 üzenetére
Szia,
for(s=1; !read.eof(), s<=n; elozo=a)
A vessző helyett tegyél &&-t. Vesszővel a bal fele ugyan kiértékelődik, de nem számít bele a kilépési feltételbe. Az s pedig a te esetedben nem lesz nagyobb vagy egyenlő az n-nél, és így végtelen ciklusba kerül az egész.
Egyébként, ha csak annyi a feladat, hogy megkeresd a leghosszabb sorozatot, felesleges eltenned tömbbe. Elég egyszer végigmenni a fájlon, és menet közben megkeresni a legtöbb egymás után következő ugyanolyan számot.
-
alpihun
senior tag
válasz Kosztinho #4935 üzenetére
OMG!
Minimum a fél programkód újraírására számítottam. Elásom magam
Köszi.
Az egy fokkal még bonyolultabb, vagy csak nem látom. Ez logic ez life. Működik s kész, igaz, hogy így s igaz, hogy nem jó felfogás, de legalább van hova fejlődni.Bagoly mondja verébnek, hogy nagy a feje, búsuljon a ló.
-
tomrRRR
senior tag
válasz alpihun #4932 üzenetére
Sziasztok!
segítségeteket szeretném kérni, hogy tudnám kiírni ezt a programot C-ben ?
Írjunk egy játékot.
csinálunk egy random generátort, kérjünk be egy számot! 1-100 ig
in= 98;számítógép kiírja találgass:
beírtam: 15
A számítógép kiírja: annál nagyobb
110 beírok
A számítógép kiírja: annál kisebb
majd egy számnál kiírja hogy nyertél
winTudnatok ebben segìteni?
The easy day was yesterday!
-
axioma
veterán
válasz tomrRRR #4937 üzenetére
Oh, ez a feladat! Tobb mint nosztalgia... a gimi eleje nekem mar tul regen volt Sot, kesobb meg kellett irni a forditottjat is (a gep kerdezgessen), meg azt is hogy amikor a user kerdez, ne legyen valoban kitalalt szam, hanem ugy valaszoljon, hogy mindig kelljen a 7 kerdes minimum! Hogy izgibb legyen, az osszes tipusnal a hatar random 0-10 kozti szamtol random 90-110 kozti szamig volt (a tol-ig inditaskor ment ki a kepernyore). Termeszetesen az egesz off, mert mindez Basic-ben ment.
-
axioma
veterán
válasz tomrRRR #4944 üzenetére
41 evesen? Tinilanyaim megregulazojanak, legfeljebb... amugy 10+ eve java fejleszto vagyok. Csak tudod a 80-as evekben foleg az elso feleben nem volt annyira trivialis, hogy diakkent egyaltalan valamilyen szamitogephez kerulsz, az meg plane hogy programot irsz (tit tanfolyam a programozasrol volt mar 7.-es koromban, konyv + irasvetito, egy darab commodore talan mukodott ott, de lehet hogy csak a futasi eredmenyt vestek fel. Az akkoriban elofordulo ht, primo, sinclair gepekhez kulon basic nyelvjaras volt... es akkor me'g meglehetosen butan neztek hogy egy lanyt ilyesmi erdekelhet.)
Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben, elvileg akkor is ugyanugy kellett megoldani, pl. hogy a "meg lehetseges" szamtartomany kozepet kell mindig betippelni (sot, ha olyat kerdezett a user, ami tartomanyon kivul esett, nem is mondott kisebb-nagyobb eredmenyt, csak hogy "Ez butasag!") -
bucsupeti
senior tag
"Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben,"
+1
Ezt a mondatot, gondolkodást kellene megtanítani a mai programozótanoncoknak. Sokszor hallom hogy "C-ben simán megírom, de Java-ban ez bonyolult". Ehh.
Én HT-1080Z-n írta meg ezt a számkitaláló programot majd harminc évvel ezelőtt
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
axioma
veterán
válasz bucsupeti #4947 üzenetére
En nem keves esetben azt latom, hogy a munkatarsat kereso cegek sem feltetlen az algoritmus szerinti (illetve a lenti problema feletti elso bonyolultsagi lepcson mar az adatszerkezet is ide jon) gondolkodast nezik a jeloltben, hanem celnyelvben jartassagi fokot... ugyhogy sajnos azt kell mondjam, hogy a tanulok/hallgatok altalaban egyszeruen csak az igenyekhez alkalmazkodnak. Nyilvan vannak kivetelek igeny es fiatal munkaero oldalon is.
-
buherton
őstag
Most egy kicsit elbizonytalanodtam. Ha pointert deklarálunk, akkor azzal helyet nem allokálunk csak egy memória területet, ahol a pointer lesz, ugye?
int *ptr;
ptr[0] = 0;
ptr[1] = 1;Vagyis ez így helyes?
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... !!!
-
buherton
őstag
Köszönöm, akkor jól gondoltam.
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... !!!
-
BTminishop
aktív tag
Sziasztok,új vagyok még a programozásba még csakkonzol applikációt írtam és valamelyik nap nézegettem a c++-t és megtaláltam ez a WindowsFormsApplication-t megjelent egz ablak amit saját ízlésem szerint testre tudtam szabni.A kérdésem a következő,lehetséges olyan hogy ami konzolba megy program,azt úgy megoldani,hogy egy önnáló "program" legyen?! Tehát ablakja legyen ne a konzol nyitódjon meg és gyakorlatilag egy önnáló program legyen? Vagy ez,hogy lehetséges megoldani?Tudom nem egyszerű de legalább valami nekifutó kellene.Az olyan kommenteket kerülném,hogy "rossz pályát választottál" mert szerintem senki sem született programozónak.Köszönöm.
[ Szerkesztve ]
-
bucsupeti
senior tag
válasz BTminishop #4953 üzenetére
Előszöris a programozás szerintem az hogy egy probléma megoldására algoritmust készítesz. Ha ez megvan akkor az algoritmus köré felhasználói felületet tenni már "nem nagy ügy".
(Valójában persze a legfontosabb a felhasználói élmény, az hogy az alkalmazást használók szívesen dolgozzanak a szoftverrel.)A lényeg hogy ha C-ben tudsz algoritmusokat írni, akkor rendben vagy. Most már csak meg kell ismerni a különféle GUI keretrendszereket. Ahogy látom neked most egy picit a komponens alapú GUI fejlesztéssel kellene megismerkedned, ahol majd egy gomb megnyomására lefut az említett programod és valamilyen grafikus komponens segítségével (pl datagrid) megjeleníti az eredményt.
Rengeteg GUI építő tutorial létezik a youtobe-on. Ha C/C++ akkor én javasolni tudom a QT környezetet. Tényleg egyszerű és jól használható (ráadásul Linuxon és windowson is elérhető).
Itt egy QT oktató videósorozat.
Sok sikert!
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
alapz@j
tag
válasz BTminishop #4953 üzenetére
Nem egészen értem a problémát: ha a Visual Studio-ban (legalábbis gondolom, hogy ez, a sablon-név alapján) a "WindowsFormsApplication" varázsló kitett neked egy ablakot, amit saját ízlésed szerint testre tudtál szabni, akkor lényegében "írtál" egy GUI-val rendelkező programot, nem? Build solution aztán run.
[ Szerkesztve ]
-
BTminishop
aktív tag
válasz alapz@j #4955 üzenetére
Igen,le is tudtam futtatni és működött csak én igazából arra vagyok kíváncsi,hogy amit megírtam programot azt összetudom "kovácsolni" egy ablakkal (nehéz elmondani mire gondolok ) vagy külön kell megírnom,bonyolult elmagyaráznom de hát a programozás is bonyolult,és ez fogott meg benne!
Az előző hozzászólónak köszönöm a segítséget mindenféleképpen utána nézekpl.
#include <stdio.h>
void main ()
{
printf("Hello World!\n");
}
Most leirtam a világ legegyszerűbb programját,és igazából azzal nem vagyok én kibékülve,hogy ha ablakot akarok neki késziteni akkor ezt a programot másképp kell leírnom,más szintaxis szerint vagy ezt valahogy belehet helyezni?![ Szerkesztve ]
-
Ereshkigal
őstag
válasz BTminishop #4956 üzenetére
Az "összekovácsolás" egy hosszú tanulási folyamat része lesz.
Először is el kéne dönteni, melyik nyelven akarsz programozni (az egyik kommentedben C++-t emlegetsz, a másikban C kódot írsz), aztán lehet hozzá választani UI frameworköt. A fentebb ajánlott Qt egy elég jó választás lehet.
(Printf helyett mást fogsz használni.)
-
BTminishop
aktív tag
válasz Ereshkigal #4957 üzenetére
C nyelven programozok,csak mi az iskolában úgy szoktuk meg a microsoft visual studio-t,hogy c++ Tehát akkor ha C nyelven szeretnék programozni akkor a fenti tutoriálok nem érvényesek,igaz?
-
Ereshkigal
őstag
válasz BTminishop #4958 üzenetére
Bele lehet hegeszteni a C-t is a Qt-be (én sose próbáltam), de szerintem nem érdemes szórakoznod vele.
C-n jobban le leszel korlátozva, nem is tudom, mit szoktak ajánlani hozzá, talán GTK+-t. -
bucsupeti
senior tag
válasz BTminishop #4958 üzenetére
grafikus felület programozásánál felejtsd el a C-t! Természetesen lehet azzal is, csak nem épp a legjobb választás. Ha desktop alkalmazást akarsz készíteni akkor C++ (esetleg nagyon óvatosan mondom: Java Swing).
Ha suliban Visual Studiot használtok akkor hazsnáld azt.
[ Szerkesztve ]
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
DrojDtroll
addikt
Mi lehet a hiba? Miért nem tudok négy dimenziós tömböt deklarálni?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t[100][100][100][100], i, j, k, l;
int bentvan=1, tanar, tantargy, hetnapja, ora;
printf("Succesfull declaration\n");
for(i=0;i<100;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
for(l=0;l<100;l++){
t[i][j][k][l]=0;
}
}
}
}
do{
printf("Add meg a tanart");
scanf("%d", &tanar);
printf("Add meg a tantargyat");
scanf("%d", &tantargy);
printf("Add meg, hogy a het melyik napjan");
scanf("%d", &hetnapja);
printf("Add meg, hogy hanyadik ora");
scanf("%d", &ora);
if(tanar==0){
bentvan=0;
}else{
t[tanar][tantargy][hetnapja][ora]=1;
}
}while(bentvan);
return 0;
} -
Karma
félisten
válasz DrojDtroll #4962 üzenetére
Hibakeresésnél legközelebb másold ide a pontos hibaüzenetet, és hogy fordításkor vagy futáskor történt a hiba.
Egyébként szerintem az a baj, hogy egy 100^4 elemű inttömb bő 400 MB memória lenne, amit stacken nem lehet elhelyezni...
Ha ekkora memóriaterület kell, nem úszod meg a heap használatát (malloc/free), de sokkal célravezetőbb, ha újragondolod a feladatod. Több mint valószínű, hogy nincs szükséged az egész tömbre a memóriában.
[ Szerkesztve ]
“All nothings are not equal.”
-
alapz@j
tag
válasz BTminishop #4956 üzenetére
C-ben is könnyedén lehet GUI-t programozni, akár közvetlenül a Win32 API-t akár valamelyik multiplatform toolkitet, mint a GTK vagy az egyébként általam is használt és imádott IUP. Ettől függetlenül én is a Java Swinget vagy a .Net-et ajánlanám kezdő programozónak, mert azok eleve adottak a Java és a .Net környezetekben, nem kell dll-ekkel vagy statikus programkönyvtárakkal bajlódni.
A kérdésedre egyébként az a válasz, hogy az ablakot a megfelelő függvényhívásokkal hozod létre (kovácsolod a programodhoz): pl. win32 API-val
...
int mydialog = DialogBox(hInstance, MAKEINTRESOURCE(DLG_MYDLG), NULL, (DLGPROC)MyDlgProc);IUP-al:
Ihandle *dlg;
...
IupShow(dlg);stb., stb.
Ja, és egy jó tanács: ne keverjétek a C-t és a C++ -t, még nevükben sem
-
DrojDtroll
addikt
Hogyan tudom konyen a kovetkezo bemenetet int tombbe alakitani?
21 45 3 68
-
bucsupeti
senior tag
válasz DrojDtroll #4966 üzenetére
bash scriptben akarod megtenni?
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
lotuska
tag
Sziasztok, kezdo vagyok C-ben (elso programom lenne), elso eves infos, nem Magyarorszagon. Nem nagyon ertek angolul sem sokat, utananeztem a beolvasasnak neten, de nem jottem ra mi a gond, eddig Pascalt tanultam, nem ertem mi a baj ezzel a beolvasassal: (a source file .c kiterjesztessel van elmentve)
#include <stdio.h>
void main()
{
char letter;
printf("kerem a karaktert \n");
scanf("%c", &letter);
printf("%c", letter);
}a hibauzenet:
Error 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\roland\documents\visual studio 2013\projects\consoleapplication1\elso.c 6 1 ConsoleApplication1
Valaki elmagyarazna? koszi a segitseget (a projektem C++/win32)
-
alapz@j
tag
válasz lotuska #4973 üzenetére
Már megbocsáss, de te nem a problémát oldottad meg, hanem a compilert sikerült rávenned arra, hogy szemet hunyjon a hibád felett. Mi akadálya volt annak, hogy a szájbarágós magyarázatnak megfelelően a scanf_s függvényt használd a scanf helyett? És akkor egy csapásra egy buffer overflow lehetőséget is kiküszöböltél volna...
char c;
scanf_s("%c", &c, 1);[ Szerkesztve ]
-
lotuska
tag
//harom beolvasott szam kozul a legkisebbet hat. meg
#include <stdio.h>
void main()
{
int i, szam, min;
for (i = 1; i < 4; i++)
{
printf("kerem a szamot\n");
scanf_s("%d", &szam, 1);
if (i == 1)
min = szam;
else
if (szam < min)
min = szam;
}
printf("A legkisebb szam: \n", min);
getchar();
}Azt akarom megkerdezni, hogy miert nem ir ki ez semmit a kepernyore, valakine van valamilyen otlete? Koszi
-
lotuska
tag
#include <stdio.h>
void main()
{
char c;
int a, b, d;
printf("kerek ket egesz szamot es a vegezni kivant muvelet szimbolumat\n");
scanf_s("%d%d%c", &a,&b,&c, 1);
if (c == '+')
{
d = a + b;
printf("%d %c %d = %d", a, c, b, d);
}
}Miutan beolvas ket egesz szamot, miert ugrik tul? Nem keri be a karaktert, nem ertem miert... Ha kulon scanf_s irok akkor sem... Valaki tudja mi a problema?
-
bucsupeti
senior tag
válasz lotuska #4978 üzenetére
A billentyűzet pufferbe bennmarad egy enter és azt olvassa ki a scanf a %c-re
Ezt úgy lehet kezelni, hogy a scanf-nek megadod az elválasztó karakter, amit a beolvasáskor elnyel.
Az elválasztó karakter ez esetben a \r.Érdemes kiíratni hoyg mit is olvasott be, így hamar kiderülnek a hasonló hibák.
Javítsd ki így a scanf-es sort:
scanf("%d\r%d\r%c",&a,&b,&c);
így nekem működött linux alatt. a scanf_s nem ansi C szabvány, hanem a microsoftnak a találmánya, azzal nem tudom kipróbálni.
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
Cidan
tag
Sziasztok!
Szeretnék némi segítséget kérni tőletek bináris fájlból való olvasáshoz. Találtam egy feladatot nemrégiben ami megfogott, mert nem tudok rájönni a megoldásra. Így szól:
"Olvassa be egy 'h.bin' nevű bináris fájlból a long int h[6]; tömböt, 6*sizeof(long int) méretben!"Odáig eljutottam, hogy ha minden igaz akkor fread() függvényt kell használni az eljáráshoz, viszont nem teljesen értem a függvény működését és magát a feladatnak se azt a részét, hogy egy bináris fájlból hogy olvassak be egy tömböt.
Ha valaki tudna adni bővebb magyarázatot, vagy a témához szorosan kapcsolódó anyagot azt megköszönném.
-
don_peter
senior tag
Nem biztos, de itt nem a bináris fájl a lényeg, hanem az, hogy a bináris fájlból olvass be 6*sizeof(long int) méretet.
Tehát van egy tömböd aminek 6 eleme van.
elemenként (long int) mérettel.
Ez végül lesz majd egy a 6*sizeof(long int).Annyit tudok hirtelen még, hogy az int típus az maximum 32bit, ha előtte van a long, akkor hosszabb is lehet, de nem tudom mennyivel.
Talán duplája kb. 64bit.
Ha ezt követjük akkor a tömböd 6*64bit-es lesz.:
tomb[6][8] ={ // (8*8==64bit)
{0b00000001}, {0b00000011}, ...stb };Ha nem jó akkor majd a szakik javítják, de én így értelmezem..
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz don_peter #4983 üzenetére
Illetve kicsit hiányos volt az előző:
#define elemekszama 6
#define bitszam 64
unsigned char tomb[elemekszama][bitszam] = { { "1","0","1","0",...64db }, {}, ...6db };Ebben a formában mondjuk byte-onként fogja értelmezni (6*64byte), de a lényeg talán látható, hogy mire akartam rámutatni...
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
bucsupeti
senior tag
válasz don_peter #4984 üzenetére
Simán a sizeof(long) operátor kell. Így az adott implementáción magától fogja kiszámolni a méretet bájtokban, így nem kell ismerni a long mértete.
fread(tomb,6*sizeof(long).....) hívással simán beolvassuk a tömböt.
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
don_peter
senior tag
Srácok, kellene írnom egy Windows programot amellyel COM porton keresztül egy PIC-nek (mikrovezérlő) adatokat tudok küldeni USART (RX/TX) adatvonalon.
Egyelőre csak kisebb 1 LED be/ki kapcsolására gondoltam.
Ahogy olvasgatok a C Sharp-ot ajánlják kinti fórumokon.
Mi a véleményetek? Milyen programot érdemes használnom?
Tudtok adni linket esetleg letöltéshez illetve, ezek ingyenesen használhatóak vagy fizetős programok?
Előre is köszi.Ja igen C nyelven írnám a profikat.
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
DrojDtroll
addikt
Hogyan lehet egy ilyen stringbol szamokat csinalni?
"2 31 457"
[ Szerkesztve ]
-
don_peter
senior tag
válasz DrojDtroll #4988 üzenetére
atio() függvény lesz a barátod
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz DrojDtroll #4990 üzenetére
Tördeld el a stringet a szóközöknél és utána az eldarabolt stringeket már át tudod alakítani az atoi() függvénnyel.
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
DrojDtroll
addikt
válasz DrojDtroll #4992 üzenetére
Irtam ra sajat fugvenyt ami szetszedi innentol mar minden megy az atoi()-val.
-
don_peter
senior tag
válasz DrojDtroll #4993 üzenetére
Nah akkor megoldódott.
Egyébként egy for() és if() feltéttel meg lehet oldani.[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
alapz@j
tag
válasz DrojDtroll #4988 üzenetére
char *string = "2 31 457";
int i1, i2, i3;
sscanf(string, "%d %d %d", &i1, &i2, &i3); -
alapz@j
tag
válasz DrojDtroll #4996 üzenetére
Jól megbonyolítottad a dupla tömbökkel
char string[] ="1 22 333 444 5555";
char *pch = strtok(string," ");
while (pch != NULL) {
printf("%i\n", atoi(pch));
pch = strtok(NULL, " ");
}vagy ha már belelendültem:
char *string = "1 22 333 4444 5555";
size_t i = strlen(string);
while (--i) if (string[i] == ' ') printf("%i\n", atoi(string + i));ez utóbbi jobb is, mert a strtok-al ellentétben nem módosítja a stringedet.
-
lotuska
tag
sziasztok, valaki leirja hogy lehet a legegyszerubben azt a programot megirni, hogy:
beolvasunk egy szuletesi datumot es irjuk ki hany napot elt a mai napig az illeto szemelykoszi
Ú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!
- Új Beats fej- és fülhallgatók jelentek meg
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Robogó, kismotor
- PlayStation 4
- Autós topik látogatók beszélgetős, offolós topikja
- Modern monitorokra köthető 3dfx Voodoo kártya a fészerből
- Tasker
- Építő/felújító topik
- Milyen NAS-t vegyek?
- Milyen légkondit a lakásba?
- További aktív témák...