Fontos linkek a C-ről:
Prog.hu-s cikkek
Prog.hu-s tudástár témák
The C Library Reference Guide
Standard C
Wikipedia
C Tutorial
Programming in C
Bevezetés a C programozási nyelvbe
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [Mr Dini:] Mindent a StreamSharkról!
- [Re:] [bacsis:] Készülődés a BRSZK-ra
- [Re:] [Lalikiraly:] Gigabyte G5 MF notebook bemutató
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [Mr Dini:] Ha szeretnéd rootolni az LG Smart TV-d, tedd meg most!
- [Re:] Helyettesíthetik-e gépek az emberi fordítókat?
- [Re:] eBay-es kütyük kis pénzért
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
GAMEPOD.hu témák
Téma összefoglaló
- Utoljára frissítve: 2014-04-25 14:12:00
LOGOUT.hu
Hozzászólások
Jester01
veterán
MOD: ha figyelmesebben olvastam volna akkor láttam volna, hogy az -lm már megvan Pedig azzal lesz valami, mert ez akkor is linker error. Be tudnád másolni az egész tesztprogramot és a pontos parancssort és hibaüzenetet?
$ cat >test.c
#include <math.h>
int main()
{
float c = pow(3, 2);
return 0;
}
$ gcc -Wall -lm test.c
test.c: In function 'main':
test.c:4: warning: unused variable 'c'
[ Szerkesztve ]
Jester
n00n
őstag
Jester01
veterán
A libraries fülön add hozzá.
Jester
n00n
őstag
Ezt a hibát dobja:
/usr/bin/ld: cannot find -l-lm
Jester01
veterán
Ott csak az m-et kell hozzáadni, mint láthatod a -l automatikusan elé kerül.
Jester
n00n
őstag
Sajnos ez sem jó:
/usr/bin/ld: cannot find -l-m
Jester01
veterán
Mert még a kötőjelet is le kellene szedni, nem látod?
Jester
n00n
őstag
Basszus, elég lassan kapcsolók ma. Nagyon szépen köszönöm a segítséget.
eriktoth
tag
Üdv! Olyan kérdésem lenne, hogy van egy számítási feladatunk amit meg kell oldani külön függvényekben, nem szabad a main-ba az egészet. A kérdésem az lenne, hogy hogy lehet ezeket meghívni a main-ba, előre is köszönöm
WonderCSabo
félisten
eriktoth
tag
Köszönöm ! De lenne olyan probléme, hogy 1 függvénybe, több műveletet végez el, és például van az első ami végzi a beolvasást, utána meg a második ami maga a számításokat és a kiirast, ezt hogyan tudnám ugy meghívni main-ba, hogy fusson, és ne csak ha az egész példát main-ba teszem, sajnálom, de kezdő vagyok és nekem ez elég magas :S
WonderCSabo
félisten
Nem tudom mivel kell műveletet végezned, de csináld ezt: vmilyen változókba visszatérsz az első beolvasó fv-el, majd ezekre a main-ben meghívod a műveletet elvégző fvt.
int main(){
a = beolvas();
művelet(a);
return 0; }
Szerk.: De ha erre nem jöttél rá magadtól, akkor nem magyarázták el rendesen a függvényeket.
[ Szerkesztve ]
TheRolf
csendes tag
Sziasztok! Az alábbi program valamiért nem fut le, meg tudná mondani valaki, mi a hiba? (+építő kritikát is elfogadok, hogy mit használjak mi helyett stb.) Előre is köszi:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
int main(){
char string[20];
char back[20];
int i,len;
bool rel;
rel=true;
printf("Add meg a szot! ");
gets(string);
len = strlen(string);
if(len%2==0){
for(i = 0; i<len/2; i++){
if(string[i]!=string[len-i]){
rel=false;
}
}
}
else{
for(i = 0; i<(len+1)/2; i++){
if(string[i]!=string[len-i]){
rel=false;
}
}
}
if(rel==true){
printf("palindrom");
}
else{
printf("nem palindrom");
}
}
kingabo
őstag
Hali!
Csak gyorsan átfutva az tűnt fel, hogy a string-ben az n+1-edik elemre hivatkozol. Pl van egy 5 hosszú stringed, akkor az indexek 0 és 4 között vannak a string[len-i] i=0 esetén viszont 5. Megoldás vonj le még 1-et az indexből, vagyis így nézzen ki string[len - i - 1].
Hibakereséhez ajánlom a debugger használatát.
Jester01
veterán
1) gets-t tilos használni
2) teljesen fölösleges a két változat, a második jó (lesz*) mind a két esetben
3) a math.h is fölösleges
4) ha egyszer int main, akkor illene valamit visszaadni
5) a fordító üzeneteit érdemes megszívlelni (és persze bekapcsolni őket)
6) a kiírás végére illene soremelést tenni
7) a "valamiért nem fut le" szánalmas hibaleírás
8) a ciklusból ki lehet lépni ha már kiderült, hogy nem palindrom
MOD: * úgy értem, ha a kingabo által fentebb jelzett hibát javítod
[ Szerkesztve ]
Jester
n00n
őstag
Miért tilos a gets-et használni? (Tényleg nem tudom. )
Jester01
veterán
Azért mert nincs benne mérethatár. Vidáman túlírja a buffert ha a felhasználó több betűt ad meg mint amennyire számítasz.
Jester
dany27
őstag
Sziasztok!
ANSI C-ben hogy tudok grafikus alkalmazásokat készíteni??
C++ nem játszik, ez kitétel hogy ANSI C-ben készüljön a program....
Előre is köszi!
Jester01
veterán
Az a környezettől (operációs rendszer vagy hardware) függ.
Attól, hogy maga a program ANSI C, még nem fog mindenütt működni, ugyanis a szabványban nincs szó grafikáról.
Jester
dany27
őstag
Az jó... Mert suliba kellene egy projekthez, ahol engedik grafikus alkalmazás készítését is noha ők nem tanították! Windowson lenne futtatva.
Tudnál adni valami jó forrást hozzá?
Jester01
veterán
windowson például a gdi,gdi+,directx apikat lehet használni. Információ, mint mindig, az msdn.
Jester
TheRolf
csendes tag
Köszi a segítséget, és a khm kritikát, mint írtam, kezdő vagyok
1) a tanár azt írta segítségként a feladathoz, hogy fgets-et lehet használni; azt is tilos?
4) return 0; <- így kell?
5) Windows alatt dolgozom CodeBlocks-szal, a fordító üzenetei gondolom a Build Messages, ha nem fordul le a program, akkor tudom értelmezni, mi a hiba, de az előző esetben nem írt ki semmit (úgy emlékszem); ha van más üzenet is, kérlek írd meg, hol keressem
6) a sorelemés ugye a " \n " ?
Köszi!
Jester01
veterán
1) igen, fgets-et szabad. Annak meg lehet adni mekkora a puffered mérete, így nem fog többet visszaadni annál.
4) igen
5) nézz körül hol lehet bekapcsolni a figyelmezető üzeneteket is (warnings)
6) igen
Jester
WonderCSabo
félisten
A warningokat is a Build Messages ablakba dobja. Settings -> Compiler and Debugger settings -> És fordítófüggően, de általában a Wall kapcsolót kell bepipálni.
TheRolf
csendes tag
A build messages-be eddig is írta hogy "x errors, x warnings", szóval az oké.
Más: hogy lehet bekérni két egyjegyű számot így: "x y" és azt eltárolni két int formájában (n = x, m = y)? Már mindent kipróbáltam, a legjobb eredmény, hogy az első számot eltárolja, de a második helyére y-on kívül több számjegy kerül.
#include <stdio.h>
int main(){
int i,n,m;
char kar[4];
char en,em;
fgets(kar,4,stdin);
en = kar[0];
em = kar[2];
printf("%c %c\n",en,em);
n = atoi(&en);
m = atoi(&em);
printf("%d\n",n);
printf("%d",m);
return 0;
}
az első printf is értelmes dolgokat ad ki, de utána az atoi-nál elromlik valami, és plussz számok jönnek be...
[ Szerkesztve ]
Jester01
veterán
Itt csak az a baj, hogy az atoi-nek string kell, ami C-ben nulla byte-tal lezárt karaktertömböt jelent. Több lehetőséged is van. Talán a legegyszerűbb, ha a kar[1]-et nullázod. Ekkor ugye így fog kinézni a tömb { x, 0, y, 0 } (a végére az fgets tette a nullát). Ilyenformán a konverzióhoz simán megadhatod az &kar[0] illetve &kar[2] pointereket (ami ugyanaz mint a kar ill. kar+2).
Másik lehetőség egy számjegyű számok konvertálására ha simán levonod belőle a 0 ascii kódját, pl. n = en - '0';
Jester
TheRolf
csendes tag
Köszi, a kar[1] és a biztonság kedvéér a kar[3]-at is egyenlővé tettem '\0'-val, így működik
dany27
őstag
Sziasztok!
Code blocks+GTK segítségével szeretnék GUI-s alkalmazást írni c-ben...
De valamiért nem akar lefordulni már az első példa program sem...
Ilyen hiba tömkellegét dobja: C:/GTK/include/gtk-2.0/gdk/gdkdnd.h:126: error: expected ')' before '*' token
Fent van a dev kit a GTK-hoz és be is van állítva a linker meg a compiler is!
Mi lehet a gond?
Előre is köszi!
[ Szerkesztve ]
dany27
őstag
na ezeket sikerült kiküszöbölnöm...
Most ilyenért köhög: C:\Users\Dani\Documents\C\konyvtar\main.c|7|undefined reference to `gtk_window_new'|
Egyszerű sima példaprogramot szeretnék lefutattani hogy lássam müködik a dolog...
#include <gtk/gtk.h>
int main (int argc, char *argv[]) {
GtkWidget * main_window;
// gtk_init (&argc, &argv);
// main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
// gtk_widget_show (main_window);
// gtk_main ();
return 0;
}
[ Szerkesztve ]
Sk8erPeter
nagyúr
Biztos nincs include-olva valami szükséges lib, vagy a franc se tudja kitalálni így a kódod nélkül...
Egyébként ha már beírsz egy kérdést, és megtaláltad rá a megoldást (ld. előző kérdésed), nem ártana, ha leírnád, mi volt az. Hátha más is találkozik vele...
egyébként elképesztő, hány helyen sírnak a Code::Blocks miatt (még egyetemi levlisták is tele vannak ezzel kapcsolatos problémákkal), hogy valami nem jön össze vele, hihetetlen, hogy még mindig nem sikerült úgy megcsinálni ezt a programot, hogy egy kezdő számára is totál kézenfekvő legyen vele minden, és ne kelljen külön szopni vele, hogy be legyen konfigolva. Vagy ez az első szűrő?
Szerk.: látom szerkesztetted a hsz.-edet, és bemásoltad a példakódot. Első körben pl. ezt a fórumot láttad? Vagy ezt.
[ Szerkesztve ]
Sk8erPeter
dany27
őstag
Teljes mértékben igazad van Sk8erPeter!
A hiba forrása az volt hogy nem elég felrakni az alap GTK dev kitet hozzá hanem van még melette 4 pakk ami kell neki!(glib, cairo, atk, pango)
Nem nem ez az első szűrő egyébként, de ki a franc gondolná h nem rakják bele akkor normálisan egy pakkba az egészet. Akkor mi értelme van külön kiadni ha úgyis már a legalapabb szarnál is kell neki a többi csomag!
[ Szerkesztve ]
Jester01
veterán
Ebben konkrétan ki van kommentezve az amit a hibaüzenet hivatkozik tehát valamit sumákolsz
Egyébként undefined reference akkor szokott lenni, ha elfelejted hozzálinkelni a megfelelő könyvtárakat. Ugye a headerek kellenek a fordításhoz, a libraryk pedig a linkeléshez.
Jester
dany27
őstag
Nem sumákolok csak próbáltam kiszűrni azt a részt amelyikért kiabál de végül nem maradat semmi És nem vettem észre h ez maradt a vágólapomon.
Elméletileg ez egy hivatalos forrásból származó szemléltető kód....
dany27
őstag
Megvan a teljes hiba megoldása!
Szoval aki CodeBlocksal dolgozik az figyeljen oda hogy hiába 64bites a rendszerje, ne szedjen le 64bites GTK-t mert a CodeBlocks nem tud vele mit kezdeni! Én is ezzel szívtam, szedtem le 32est és most már prímán megy!
Sk8erPeter
nagyúr
Ez volt az első linken, amit küldtem.
Kérdező írta:
"For GTK, I used the all-in-one bundle of the GTK+ stack for Windows 64-bit because I am using Vista 64-bit."
válasz:
"I don't think that MinGW is able to use 64 bit libraries or produce 64 bit executables."
Sk8erPeter
dany27
őstag
Köszi!!
De azért kiírtam, mert hátha valaki lusta rákattintani, és így előbb ráakad ha csak a keresőt használja esetleg!
Sk8erPeter
nagyúr
Oké, nincs mit
Sk8erPeter
eriktoth
tag
Üdv!
Valaki tudna mondani valamit az INFINITY fügvényről?
chabeee
tag
Sziasztok! Lenne egy ilyen függvényem:
void masol (int** t1, int** t2, int** t3, const int n1, const int n2)
{
int i,j, counter = 0;
for(i=0;i<n1;i++) {
counter++;
}
for(i=0;i<n2;i++) {
counter++;
}
*(t3) = (int*)malloc(sizeof(int)*counter);
for(i=0;i<n1;i++) {
*(*(t3)+i) = *(*(t1)+i);
}
for(i=n1, j=0; i<counter,j<n2; i++, j++) {
*(*(t3)+i) = *(*(t2)+j);
}
for(i=0;i<counter;i++) {
printf("3.%d: %d\n", i+1, *(*(t3)+i));
}
free(*(t3));
}
annyit csinál hogy a t1 és a t2 dinamikus tömb elemeit belemásolja egy t3 nevű dinamikus tömbbe, viszont warningel ennél a sornál:
for(i=n1, j=0; i<counter,j<n2; i++, j++) {
ezt írja: ../main.c:113:26: warning: left-hand operand of comma expression has no effect [-Wunused-value]
ha van valakinek valami ötlete, hogy miért írja ezt, annak megköszönném a segítséget!
üdv csabi
WonderCSabo
félisten
A feltételben rakj &&-t a , helyett.
chabeee
tag
próbáltam már, ezt írja:
../main.c:115:15: error: lvalue required as left operand of assignment
../main.c:115:42: warning: value computed is not used [-Wunused-value]
make: *** [main.o] Error 1
for(i=n1 && j=0; i<counter && j<n2; i++ && j++) {
chabeee
tag
végül is tök mindegy csak kíváncsi voltam rá írtam helyette 2 ciklust!
WonderCSabo
félisten
Mondom a feltételre:
for(i=n1, j=0; i<counter && j<n2; i++, j++)
chabeee
tag
jaj, köszönöm!
kingabo
őstag
Ezekkel mit akartál megvalósítani?
for(i=0;i<n1;i++) {
counter++;
}
for(i=0;i<n2;i++) {
counter++;
}
Szerintem ez ugyanaz és nagyságrendekkel gyorsabb:
counter = n1 + n2;
A t3-at, ha csak a kiíratáshoz használod, akkor fölösleges a másolás. Ha ez egy visszatérő paraméter akarna lenni, akkor az fv végén lévő free(*(t3)); törli és ha ezután használni szerednéd (a törölt elemeket), csúnya dolgok történ(het)nek.
[ Szerkesztve ]
WonderCSabo
félisten
Én 3. ciklusnál sem értettem ezt, de nem mertem szólni, mert ránézésre ez vmi házi, vagy egyéb begyakorló program akar lenni.
eriktoth
tag
Üdv!
Hogyan lehetne ezt a képletet kiszámolni c-ben:
x +1/2 (x^3/3)! + (1/2)(3/4)*(x^5)+(1/2)*(3/4)(5/6)*(x^7/7).......
chabeee
tag
ebbe a fv-be lesz más művelet is ezért kell a t3-ba helyezni, pl rendezésre gondolok, meg ilyenek.
a counter-es az ilyen egyéni hülyeség : D
WonderCSabo
félisten
A hatványozást a pow fv-el tudod elérni. A szorzás, osztás, összeadás jele meg a szokásos... A faktoriálist meg csak meg tudod írni, lehet iteratívan is, rekurzívan is.
ArchElf
addikt
Faktoriális nem csak egész számokra van, vagy én néztem be valamit?
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
Téma tudnivalók
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Mai Hardverapró hirdetések
prémium kategóriában
ingyenes kategóriában
- I7 - GAMER /8700K + VÍZ - Z370 - 16GB DDR4 - 512GB NVME - 4TB HDD -RX 6600/8GB DDR6- 700W - RGB HÁZ
- Samsung Galaxy S23 Ultra 256gb/8gb Phantom Black
- Sony PlayStation 5 (PS5) Játékkonzol
- Samsung Galaxy S22 5G Dual Sim 8/128gb Hibátlan állapot
- 10.GEN GAMER PC /B460-STEEL-I5 10400F +VÍZ - 1TB NVME + 4TB HDD - 16GB RGB - RX 6600-8GB DDR6 + RGB/