Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#2801) Jester01 válasza n00n (#2800) üzenetére


Jester01
veterán

MOD: ha figyelmesebben olvastam volna akkor láttam volna, hogy az -lm már megvan :B 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

(#2802) n00n válasza Jester01 (#2801) üzenetére


n00n
őstag

De hol kell megadni? Ha a projekten jobb gombbal kattintok, majd a Properties alatt hozzáadom a GCC Linkerhez, ugyanazt a hibát dobja:

(#2803) Jester01 válasza n00n (#2802) üzenetére


Jester01
veterán

A libraries fülön add hozzá.

Jester

(#2804) n00n válasza Jester01 (#2803) üzenetére


n00n
őstag

Ezt a hibát dobja:

/usr/bin/ld: cannot find -l-lm

(#2805) Jester01 válasza n00n (#2804) üzenetére


Jester01
veterán

Ott csak az m-et kell hozzáadni, mint láthatod a -l automatikusan elé kerül.

Jester

(#2806) n00n válasza Jester01 (#2805) üzenetére


n00n
őstag

Sajnos ez sem jó:

/usr/bin/ld: cannot find -l-m

(#2807) Jester01 válasza n00n (#2806) üzenetére


Jester01
veterán

Mert még a kötőjelet is le kellene szedni, nem látod?

Jester

(#2808) n00n válasza Jester01 (#2807) üzenetére


n00n
őstag

Basszus, elég lassan kapcsolók ma. Nagyon szépen köszönöm a segítséget. :R

(#2809) eriktoth


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

(#2810) WonderCSabo válasza eriktoth (#2809) üzenetére


WonderCSabo
félisten

(#2811) eriktoth válasza WonderCSabo (#2810) üzenetére


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

(#2812) WonderCSabo válasza eriktoth (#2811) üzenetére


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 ]

(#2813) TheRolf


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");
}
}

(#2814) kingabo válasza TheRolf (#2813) üzenetére


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. ;)

(#2815) Jester01 válasza TheRolf (#2813) üzenetére


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

(#2816) n00n válasza Jester01 (#2815) üzenetére


n00n
őstag

Miért tilos a gets-et használni? (Tényleg nem tudom. :U )

(#2817) Jester01 válasza n00n (#2816) üzenetére


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

(#2818) dany27


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!

(#2819) Jester01 válasza dany27 (#2818) üzenetére


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

(#2820) dany27 válasza Jester01 (#2819) üzenetére


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á?

(#2821) Jester01 válasza dany27 (#2820) üzenetére


Jester01
veterán

windowson például a gdi,gdi+,directx apikat lehet használni. Információ, mint mindig, az msdn.

Jester

(#2822) TheRolf válasza Jester01 (#2815) üzenetére


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!

(#2823) Jester01 válasza TheRolf (#2822) üzenetére


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

(#2824) WonderCSabo válasza Jester01 (#2823) üzenetére


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.

(#2825) TheRolf válasza WonderCSabo (#2824) üzenetére


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 ]

(#2826) Jester01 válasza TheRolf (#2825) üzenetére


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

(#2827) TheRolf válasza Jester01 (#2826) üzenetére


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 :)

(#2828) dany27


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 ]

(#2829) dany27 válasza dany27 (#2828) üzenetére


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 ]

(#2830) Sk8erPeter válasza dany27 (#2829) üzenetére


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... :U

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. :U 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ő? :D

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

(#2831) dany27 válasza dany27 (#2828) üzenetére


dany27
őstag

Teljes mértékben igazad van Sk8erPeter! :R

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 ]

(#2832) Jester01 válasza dany27 (#2829) üzenetére


Jester01
veterán

Ebben konkrétan ki van kommentezve az amit a hibaüzenet hivatkozik tehát valamit sumákolsz :K

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

(#2833) dany27 válasza Jester01 (#2832) üzenetére


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 :D É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....

(#2834) dany27 válasza dany27 (#2833) üzenetére


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!

(#2835) Sk8erPeter válasza dany27 (#2834) üzenetére


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

(#2836) dany27 válasza Sk8erPeter (#2835) üzenetére


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! ;)

(#2837) Sk8erPeter válasza dany27 (#2836) üzenetére


Sk8erPeter
nagyúr

Oké, nincs mit :)

Sk8erPeter

(#2838) eriktoth


eriktoth
tag

Üdv!
Valaki tudna mondani valamit az INFINITY fügvényről?

(#2839) chabeee


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

(#2840) WonderCSabo válasza chabeee (#2839) üzenetére


WonderCSabo
félisten

A feltételben rakj &&-t a , helyett.

(#2841) chabeee válasza WonderCSabo (#2840) üzenetére


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++) {

(#2842) chabeee


chabeee
tag

végül is tök mindegy csak kíváncsi voltam rá írtam helyette 2 ciklust!

(#2843) WonderCSabo válasza chabeee (#2841) üzenetére


WonderCSabo
félisten

Mondom a feltételre:

for(i=n1, j=0; i<counter && j<n2; i++, j++)

(#2844) chabeee válasza WonderCSabo (#2843) üzenetére


chabeee
tag

jaj, köszönöm!

(#2845) kingabo válasza chabeee (#2839) üzenetére


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 ]

(#2846) WonderCSabo válasza kingabo (#2845) üzenetére


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. :B

(#2847) eriktoth


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).......

(#2848) chabeee válasza kingabo (#2845) üzenetére


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

(#2849) WonderCSabo válasza eriktoth (#2847) üzenetére


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.

(#2850) ArchElf válasza eriktoth (#2847) üzenetére


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]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.