- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- erkxt: A Roidmi becsődölt – és senki nem szól egy szót sem?
- Magga: PLEX: multimédia az egész lakásban
- droidic: Így beszélhetsz élő emberrel EA supportban
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Elektromos rásegítésű kerékpárok
- MasterDeeJay: Noname 1TB-os SATA SSD teszt
- hcl: MS Office365 Linuxon
Új hozzászólás Aktív témák
-
chabeee
aktív tag
sziasztok!
lenne egy menüm aminek az a feladata, hogy ha nem a kilépésre megyek akkor hozza vissza magát.
tehát:
1 - jegyfoglalas
2 - hozzaadas
3 - kilépés
1
lefut a jegyfoglalas utána :
1 - jegyfoglalas
2 - hozzaadas
3 - kilépésés csak akkor hagyja abba amikor a kilépésre megyek.
a válaszokat előre is köszi
üdv csabi -
Jester01
veterán
válasz
Rickazoid #2895 üzenetére
Igen, pár változó maradt ki. Ami jelen esetben (is) nagyon fontos volt mivel a típusuk, a méretük és a sorrendjük nagyban befolyásolhatja a program működését. Igen, kitaláltam nagyjából mik lehettek.
"Ezen felül, a buffer2 és buffer3 tömbök induláskor nincsenek inicializálva"
Ez nem is tudom mit jelent.Azt jelenti, hogy C-ben a lokális változók tartalma induláskor nem definiált. Tehát bármi lehet benne. Ezért rossz, ha te valamit keresel benne.
Az általam tanultak szerint a while(Name[I][l]=buffer3[l++]); kifejezés megfelelő.
Nem az, mivel a szabvány szerint nem szerepelhetne benne l és l++ is. A működése ugyanis attól függ, melyik értékelődik ki hamarabb és ezt a szabvány nem definiálja. Ha a jobb oldal számítódik ki először, akkor oda az l eredeti értéke helyettesítődik, de a bal oldalra már a növelt érték kerül. Fordított sorrendben mindkét helyre az eredeti érték kerül.
kellett valami, ami kinullázza a tömb tartalmát
Tehát a tömböt akarod kinullázni. Van neki mérete, tessék szépen végigmenni rajta és kinullázni. for(l = 0; l <= size; ++l) buffer2[l] = 0; (mivel ugye a tömböd mérete size + 1 volt.
Aki nem a debugger használatát tanítja először fejbe kellene kólintani.
-
Rickazoid
addikt
válasz
Jester01 #2894 üzenetére
Ez fordítható és futtatható. Nálam is csak ennyi fut épp a programomban. Egyedül az I és a rows változók deklarációja maradt ki, azok globálisak (ügy könnyebb több ciklusban kezelni ezt a néhányat, mint folyamatos értékátadásokkal, amit fogalmam sincs hogy kéne például két dimenziós tömb esetén), de erre utalok is, illetve az első pár sorból kitalálható.
Nekem ennyi a hibaüzenet a Code::Blocks alatt:
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings
Mielőtt és miután javítottam a hibát a sorszámlálásnál, ahol a bezárt fájlra hivatkozott a megnyitott helyen. Persze nem ez a gond.Valgrindről nem is hallottam eddig, debug programok lesznek az utolsók, amiket tanulunk, ha egyáltalán sor kerül rá. Korábban sem tanultam hasonló programok használatát, pedig TurboPascalban sokkal messzebb mentünk anno.
"Ezen felül, a buffer2 és buffer3 tömbök induláskor nincsenek inicializálva"
Ez nem is tudom mit jelent. Illetve tudom, csak nem értem ez C-ben mit jelent. Nem használtunk semmi egyebet órákon eddig, igazából fájlkezelést se, de nem lehet megoldani az adatbázis eltárolását fájlkezelés nélkül. A buffer viszont miután fel van töltve, a buffer2-nek és a buffer3-nak pont úgy kéne működnie, mint az eddigi tömböknek, amikkel dolgom volt.
Egyébként az általad írt hibaüzenet mit jelent? Valahogy nem tűnik értelmes mondatnak számomra egyik sem. Az általam tanultak szerint a while(Name[I][l]=buffer3[l++]); kifejezés megfelelő. Amíg van elem a buffer3-ban (l 0-ról indul és növeli önmagát, amíg a kifejezés érvénytelenné válik, mert az aktuális buffer3 helyen nincs semmi), azt eltárolja a Name tömbbe.Az EOF csak egy találgatás volt, nem akartam felesleges ciklusokat írni, de kellett valami, ami kinullázza a tömb tartalmát, mielőtt új értékek mennének bele, mert ha a második rövidebb, felesleges karakterek maradnak bent. De azt át tudom írni, ha jól rémlik (így reggel már rémlik) ha kihagyom az összehasonlítást és csak annyit írok, hogy while(buffer2[l++])buffer2[l-1]=' \0'; ugyanazt az eredményt érem el.
Szerk.: Köszi, úgy tűnik az EOF elhagyása megoldotta a dolgot. Ezt megjegyzem, hogy ezt nem használjuk ilyenkor, csak ha ezzel zárjuk a streamet.
-
Jester01
veterán
válasz
Rickazoid #2893 üzenetére
Tényleg olyan nagy dolog fordítható, futtatható kóddal megtisztelni a segítőkész embereket?
Valahogy kipótoltam, de hogy így most az-e amit te használsz azt honnan tudjam?
Általános jótanács, hogy kapcsold be a fordító figyelmeztetéseit:
warning: suggest parentheses around assignment used as truth value
warning: operation on 'l' may be undefinedEzek a while(Name[I][l]=buffer3[l++]); sorra vonatkoznak.
Következő jótanács, hogy használd a valgrind (vagy más hasonló) programot. Ez például megmutatja, hogy itt-ott a már bezárt f fájlból akarsz olvasni az ff helyett.
Ezen felül, a buffer2 és buffer3 tömbök induláskor nincsenek inicializálva, tehát legalább az első iterációban baj van. A későbbiekben sem látom hogy kerül bele EOF ami különben is int konstans, tehát char változóba nem szabad beletenni.
Ezeket javítva már valamit csinál a program, de hogy az jó-e azt nem tudtam a leírásodból kibogozni.
-
Rickazoid
addikt
Üdv!
Akadt némi problémám egy programommal. Gyakorlatilag kész vagyok vele, látszólag pont úgy működik, ahogy kell, azonban a tesztelés közben belefutottam egy jókora problémába. Bizonyos helyzetekben a fájlból beolvasott számokat lenullázza. Beolvassa jól a számot, mint karaktert, de a számmá alakításnál 0 kerül a változókba. Látszólag számtól független, bármi lehet ott, rendesen átalakítja, amíg csak pár sor van. De ha ismétlődnek a sorok, akkor akármennyit átalakít, ahogy kell. Ha ugyanannyi van, mintha ismétlődne, de más a tartalom, akkor is jól működik. De ha az eredeti tesztfájlba csak még egy sort beírok, máris rossz lesz. Illetve akkor is rossz lesz, ha bizonyos sorokat meghosszabbítok. Magyarul számtalanszor előidéztem a hibát, de abszolút semmi fogalmam nincs róla, hogy mi lehet a gond.
A kérdéses része a programomnak a következő:
#include <stdio.h>
#include <stdlib.h>
#define MAXID 100
#define MAXLEN 20
#define OUTF "AdatbazisTeszt3.ctlg"
void printFile2Mem()
{
long size;
rows=0;
I=0;
//az OUTF által hivatkozott fájl létrehozása, ha nem létezne
FILE *f;
f=fopen(OUTF, "a");
fclose(f);
//a fájl megnyitása olvasásra
FILE *ff;
ff = fopen(OUTF, "rt");
fseek(ff, 0, SEEK_END); //a fájl végének megkeresése
size = ftell(ff); //a file pointer beolvasása, megadja a fájl méretét
fseek(ff, 0, SEEK_SET); //vissza a fájl elejére
//printf("%d\n",size);
//a buffer tömbök átmeneti tárolóként funkcionálnak majd a fájlból beolvasandó adatoknak
char buffer[size+1],buffer2[size+1],buffer3[size],buffer4,c;
//a teljes fájl beolvasása a buffer[] tömbbe
fread(buffer, 1, size, f);
buffer[size]=0;
//fclose(f);
//printf("The file:\n%s\n", buffer);
//segédváltozók a ciklusokhoz, amik a buffer[] tömbből olvassák ki az adatokat és teszik a megfelelő átmeneti tárolóba
int i=0,j=0,k=0,l=0,ii;
fseek(ff, 0, SEEK_SET); //ismét a fájl elejére állítja a mutatót
//beolvassa a rows globális változóba a sorok számát
while((c=fgetc(f))!=EOF)
if(c=='\n')rows++;
//a fájl bezárása
fclose(ff);
printf("%d\n",rows);
printf("The file:\n");
//a buffer[] tömb elemeinek megfelelő tömbökbe helyezése
for(ii=0;ii<rows;ii++)
{
j=0;
while(buffer2[l++]!=EOF)buffer2[l-1]='\0';l=0; //enélkül hibák keletkeznek a különböző hosszúságú értékek ugyanazon tömbbe tárolásakor
//a buffer2[] tömbbe beolvassa az aktuális sor ID-jét
//egyelőre szövegként kezeli
while(buffer[i++]!=';')
if(buffer[i-1]>='0'&&buffer[i-1]<='9')
buffer2[j++]=buffer[i-1];
printf("buffer: %s\n",buffer2);
j=0;
while(buffer3[l++]!=EOF)buffer3[l-1]='\0';l=0; //enélkül hibák keletkeznek a különböző hosszúságú értékek ugyanazon tömbbe tárolásakor
//a buffer[3] tömbbe beolvassa az aktuális sor nevét
while(buffer[i++]!=';')buffer3[j++]=buffer[i-1];
//printf("buffer: %s\n",buffer3);
//buffer4='\0'; //bár a buffer4 csak egy karakteres változó, biztosítékként bekerült ez az értékadás a buffer[] tömbből való értékadás elé
//eltárolja a buffer4 változóba az aktuális sor típusát
buffer4=buffer[i];
//az ID[] tömbb adott helyére eltárolja a buffer2-ben tárolt stringet integerként
printf("buffer: %s\n",buffer2);
ID[I]=atoi(buffer2);
printf("ID: %d\n",ID[I]);
//a Name[][] tömb adott helyeire eltárolja a buffer[] tömb elemeit
while(Name[I][l]=buffer3[l++]);l=0;
//a Tpy[] tömb adott helyére eltárolja a buffer4 értékét
Tpy[I++]=buffer4;
//kezdetlegesen formázott kiírása az adatbázis elemeinek
//printf("%d\t%s\t%c\n", ID[ii],Name[ii],Tpy[ii]);
}
}Namost sejtem, hogy nem valami szép (és a tömbök méretei sincsenek egyelőre pontosan beállítva), de ennél jobbat egyelőre nem tudok írni. A hiba valahol a vége felé lehet, kiírattam a buffer2 változó értékét két helyen is, amikor az ID-tömbbe 0-kat rak, akkor a második kiíratásnál üres. Valamiért a kettő közt történik vele valahogy valami, viszont nem értem hogy, hisz nem nyúl hozzá semmi.
Egy példafájl:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
5;ötös;CEzzel működik. De például ezzel már nem:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
5;ötös;C
6;hatos;CEzzel sem:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
512;ötszáztizenkettő;CEzzel viszont igen:
ID;Name;Type
1;egyes;C
2;kettes;C
945;kilencszáznegyvenönégyes;C
4;négyes;C
512;ötszáz;CEz utóbbinál ha megnövelem egy nem ékezetes karakterrel az utolsó sort, akkor még működik, de nagyobb növelést nem visel el. Amikor ezt észrevettem, azt hittem valami bájt korlátba ütköztem, de nem, ha a címsor alatti sorokat lemásolom és újra beillesztem, akkor is jól működik. Sőt ha egyenként átírom az ID-ket és össze-vissza írok karaktereket a nevekbe, hogy ne legyen ismétlődés, még akkor is működik. Sőt ha azt kibővítem egy akármilyen sorral (13.), az is működik. De ha még egy sort hozzáadok (14.), -1 hibakóddal kilép. De ha törlöm és beírok 13 sort, azonos karakterszámmal, csak más tartalommal, akkor működik. De ha azt bővítem ki egy sorral, megint jön a -1 hibakód. Ha lecsökkentem a nevek hosszát majd úgy írok be 14 sort, akkor nem kapok hibakódot, de 0-k lesznek az ID tömbben.
Nem vagyok képes felismerni a rendszert a hibákban, mintha több dolog is hibát váltana ki, de képtelen vagyok rájönni, hogy miért.
Ötletek? -
szkorhetz
őstag
Sziasztok, Srácok.
Az lenne a feladatom, hogy egy adatbázisba DVD filmeket illesszek be, módosítsak, töröljek, esetleg keresni tudjak köztük, az ezek közötti változtatást, pedig egy főmenüből érhessem el.
Az a gond, hogy még nagyon nekiállni sem tudok..
Valami ötlet?
Köszönöm szépen -
Rickazoid
addikt
válasz
Rickazoid #2889 üzenetére
Na jó, arra rájöttem, hogy a szöveg eltárolása getchar() függvénnyel szemantikai hiba miatt nem volt jó, kimaradt egy zárójel: while((name[i][j++]=getchar())!='\n');
És a kiíratás is egyszerűbben megoldható: while(putchar(name[j][k++]));
De mi van a while(getc(stdin)!='\n'){} szükségességével? Ha ezt benne hagyom, félek könnyen veszíthetek egy jegyet (c<='a' helyett c<=97 alakért is kaptam már rosszabbat). -
Rickazoid
addikt
Üdv!
Ismét volna némi C problémám. Továbbra is táblázat, ezúttal a feltöltése nem akar működni. A cél az lenne, hogy előre nem meghatározott méretű tömbökbe kérek be értékeket, szövegeket és újabb értékeket.
A példaprogramom a következőképp néz ki:int main()
{
int i=0,j=0,k=0,idx[MAXIDX];
char c='y',name[MAXIDX][NAMELEN];
float data[MAXIDX];
while(c=='y')
{
printf("ID: ");
scanf("%d",&idx[i]);
printf("Name: ");
while(getc(stdin)!='\n'){} //ha nem írom be, a következő while ciklus nem fut le
while(name[i][j]=getchar()!='\n')
j++;
printf("Data: ");
scanf("%f",&data[i]);
printf("New? (y/n): ");
while(getc(stdin)!='\n'){} //ha nem írom be, a következő getchar() függvény nem fut le
c=getchar();
i++;
}
printf("\nWriting out:\n\n");
for(j=0;j<i;j++)
{
printf("ID: %d\n",idx[j]);
printf("Name: ");
for(k=0;k<NAMELEN;k++)
{
putchar(name[j][k]);
}
printf("\nData: %.2f\n",data[j]);
}
printf("\n");
system("pause");
return 0;
}A nagybetűs változók előre vannak definiálva.
A gond az, ahogy azt a kódba is beírtam, hogy bizonyos helyzetekben a program továbblép karakterbeolvasás nélkül, illetve a szöveget a name tömbből nem írja ki, esetleg el sem tárolja.
Viszont ha ezt írom:int main()
{
int i=0,j=0,k=0,idx[MAXIDX];
char c='y',name[MAXIDX][NAMELEN];
float data[MAXIDX];
while(c=='y')
{
printf("ID: ");
scanf("%d",&idx[i]);
printf("Name: ");
while(getc(stdin)!='\n'){} //ha nem írom be, a következő while ciklus nem fut le
while(name[i][j]=getchar()!='\n')
j++;
printf("New? (y/n): ");
c=getchar();
i++;
}
printf("\nWriting out:\n\n");
for(j=0;j<i;j++)
{
printf("ID: %d\n",idx[j]);
printf("Name: ");
for(k=0;k<NAMELEN;k++)
{
putchar(name[j][k]);
}
}
printf("\n");
system("pause");
return 0;
}vagyis mindössze lehagyom a lebegőpontos szám beolvasását, nem kell a második while(getc(stdin)!='\n'){}, de ilyenkor meg ha a c értéke 'n' lesz, egy plusz entert kell nyomnom, hogy továbblépjen. Azok alapján, amit tanultam, ennek és az ez előttinek is jónak kéne lennie, se plusz entereket nem kéne várnia, se while(getc(stdin)!='\n'){} ügyeskedésre nem kéne, hogy szükség legyen és a szövegeket is el kéne tárolnia. Átnéztem az órai, működő példákat (persze egyik sem komplexebb pár sorosnál), de nem találom, hogy miért fut ez a program másképp. A scanf() és a getchar() valahogy ütközik egymással? A name[x][y] alak nem alkalmas szövegek tömbbe tárolására? (karakterek két dimenziós tömbje... miért nincs string típusú változó C-ben?)
Az órai példa ez volt szövegekre:char i,name[5][80];
for(i=0;i<5;i++)
{
printf("Type a word: ");
scanf("%s",name[i]); //nem kell & jel, mivel a nev[i] itt eleve mutató
//scanf() esetén a space is megszakító karakter,
//ezzel nem lehet szóközöket tartalmazó sorokat beolvasni
}
for(i=0;i<5;i++)
printf("%s\n",name[i]);Ebből sajnos nem jövök rá, hogy tudnék a getchar() függvénnyel beolvastatni több szöveget is egy tömbbe, ha a scanf() nem alkalmas szóközök olvasására, de nekem azok is kellenek.
-
alapz@j
tag
Esetleg bővebben is ki tudnád fejteni a jelenséget? Milyen program, milyen hibaüzenetet ad, stb?
-
--TIKI--
tag
ezt fel is raktam, de mikor lefutatom a programot nem inditja el. Nem fut le egy console ablakban
-
--TIKI--
tag
hello ! Tudtok ajánlani egy jó C nyelves programozói szoftvert ubuntu alá. Előre is köszi.
-
dany27
őstag
Sziasztok!
GTK+C párossal dolgozom. Egy olyan kérdésem lenne hogy hogyan tudnám elkapni a felhasználó által leütött billentyűt? Szöveg mezőbe szeretném ha csak bizonyos karaktereket tudnának írni....
Előre is köszi!
-
Ertem, koszi mindkettotoknek.
-
válasz
WonderCSabo #2876 üzenetére
Ja igen, a string.h es a math.h headerek nem hasznalhatoak, elvileg csak az stdio.h es az stdlib.h, bocs, ezt elfelejtettem leirni.
Korcsii: Itt int-e konvertalja majd a char-t s azert lehet hasznalni a "<=" muveletet, igaz?
Nekem meg eleg fura, hogy szinte minden visszavezetheto es kezelheto int-kent. -
Sziasztok,
Suliban most kezdtuk a C nyelv tanulasat s lenne egy feladat, amiben elsokent megkellene allapitanom, hogy egy bemenetkent kapott char tipusu ertek megfelelo-e vagy sem.
Tehat pl. a,b,c az elfogadhato s meg kell allapitani, hogy mondjuk a kapott "d" az helyes-e.
Ezt csak switch case-el lehet megcsinalni vagy van valami jobb modszer ra(gondolom van)?
Azon gondolkoztam, hogy enum-kent kellene letrehozni a karaktereket vagy egy char tipusu tombot, csak nem vagom meg lehet-e vizsgalni, hogy a kapott karakter szerepel-e a tomb elemi kozott, valami contains szerure gondolok. -
Jester01
veterán
Ugye a for(i = 1; i <= x; i += 2) ciklusod csak a páratlan számokon megy végig, így a végérték vagy x (ha x páratlan) vagy x - 1 (ha x páros). Ezért simán nem lehet megfordítani, mivel a kezdőértéket pontosan kell megadni. Például így: for(i = (x & 1) ? x : (x - 1); i >= 1; i -= 2)
-
artiny
őstag
C prog. -hogyan tovább (visszafele számoljon a ciklus)?
Feladat egy olyan karacsonyfa kirajzolasa,aminek emeletei 2 vel novekszik(sora)
http://img442.imageshack.us/img442/7364/unlediq.png#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,x,a;
scanf("%d", &x);
for (a=1;a<=3;++a){
for( i = 1; i <= x; i += 2 )
{
for( j = i; j < x; j+=2 )
{
printf(" ");
}
for( j = x-i; j < x; j++ )
{
printf("*");
}
for( j = i; j < x; j+=2 )
{
printf(" ");
}
printf("\n");
}
}
return 0;
}ez a progi tudja aztot,hogy megadom,hogy pl. 10 ...akkor addig irja a piramist míg 10 csillag kinem jon és ezt háromszor egymas ala megcsinálja.
Ezt ugy atírni,hogy pl. 10 et megadok és visszafele
a legutolso "emelet"-ől kezdve rajzolja ki. Majd az alatta lévő már csak 8 legyen, és így tovább.gondoltam olyanra,mint a pascalban van,hogy for downto ...szoval visszafele számoljon...de mikor felcsereltem a for ban a kiindulast es a végértéket a csillagok ossze-vissza futkostak a kepernyon..majd egy masik probalkozasnal csak siman a gorgeto lefutott a kepernyo aljara es semmit nem csinalt.
-
Jester01
veterán
válasz
eriktoth #2871 üzenetére
Az egy dolog, hogy a mi tanácsainkat elengedted a füled mellett, de sajnos a fordító figyelmeztető üzeneteit is (vagy be sem kapcsoltad őket).
1. össze-vissza kevered az egész illetve lebegőpontos típusokat
2. a faktoriális igen hamar igen nagy lesz
3. a ciklusban a változód neked i nem n mint az eredeti képletben
4. a hívott függvény vagy legyen előbb a kódban vagy legyen hozzá prototípus
5. ebben a formában borzalmasan lassú lesz
6. a nyelvek keveréséért azonnali főbelövés jár már két nyelv esetén is, de neked sikerült hármat is ...
7. folyamatosan kérjük, hogy ha már segítségért folyamodik valaki, akkor tiszteljen meg bennünket olvasható kóddal (indentáció és a Programkód gomb használata) -
eriktoth
tag
Üdv! valaki esetleg lat valami hibát benne? mert én sajnos nem, de számolni meg rosszul számol:
#include <stdio.h>
#include <stdlib.h>int main()
{
int i;
int x,n;
int fent=1.0,lent=1.0,arcsin=0.0;
printf("zadaj pocet ciklu \n");
scanf("%d", &n);
printf("zadaj x :\n");
scanf("%d", &x);
for (i=1;i<=n;++i){
fent=factorial(2*n)*power(x,2*n+1);
lent=power(2,2*n)*factorial(n)*factorial(n)*(2*n+1);
arcsin=arcsin+fent/lent;
}
printf("Vys %f",arcsin+x);
return 0;
}int power(int x, int n)
{
int i;
double pow=1.0;
if (n>=1){
for (i=1;i<=n;++i)
pow=pow*x;
}
else if (n<0) {
for(i=-1;i>n;--i)
pow=pow/x;
}
else if(n==0)
pow=1;
return pow;
}int factorial( int n )
{
int j;
double fact=1.0;for( j=1; j<=n;++j )
fact = fact * j;return fact;
} -
Rickazoid
addikt
válasz
alapz@j #2869 üzenetére
Csatlakozom, szerintem sincs semmi gond vele. Mondom ezt kezdőként. Aki tanulja a C programozási nyelvet, igazából egy szövegszerkesztővel és egy GCC-vel is boldogulnia kéne. Én nemrég kezdtem újra tanulni C-t, sikeresen elfelejtettem mindent és a Code::Blocks-ra esett a választásom (megpróbáltam az Eclipse és a Netbeans monstrumokat is, de azok már végképp nem alkalmasak egy kezdő számára). Eddig minden programot meg tudtam írni vele, bár voltak gondjaim, de azok nem az IDE miatt. Aki tanulja a nyelvet, az IDE-től függetlenül kell hogy megtanulja. De az egyetemen például Blodshed Dev-C++-t használunk (mert nehogy már platformfüggetlen vagy bárki által támogatott, befejezett, stabil legyen az IDE)... na az tényleg katasztrófa. Rosszak az automatikus behúzások, vacakolni kell, hogy lehessen pontosvesszőt tenni (meg sem találja az ember, hogy mi a baj, ha nem mondják meg neki), nincs automatikus kiegészítés, nincs színezés... pedig elvileg IDE... lényegében csak egy túlbonyolított szövegszerkesztő egy beépített fordítóval. A gedit+GCC alkalmasabb a feladatra. A Code::Blocks meg szimplán első telepítésre működik, ahogy kell, konfigurálás nélkül. Nekem legalábbis nem kellett semmit beállítanom, csak telepíteni. Persze lehet majd bonyolultabb projekteknél kelleni fog egyfajta konfigurálás, de amire az ember eljut odáig, hogy összetett projektet hozzon létre, amihez a C jóval mélyebb ismerete szükséges, az IDE beállítása lesz a legkisebb problémája.
Szerintem. -
alapz@j
tag
válasz
Sk8erPeter #2830 üzenetére
Bár egy ideje már nem dolgozom a Code Blocks-al, de meg kell hogy védjem: pontosan mit is kellene csinálnia, hogy vezesse a kezdők kezét? Ha egy olyan library-val akarsz dolgozni, amihez van benne varázsló, akkor megkérdezi, hogy hol vannak a lib és az include fájlok majd dob egy main.c template-et kezdésnek. Ha nincs benne varázsló, akkor az üres project tulajdonságainál be kell állítani ezeknek a helyét és lehet kezdeni dolgozni. Én személy szerint nem gondolom, hogy az IDE-nek kellene megtanítanie programozni azokat az embereket, akiknek pl. az int main/ return 0 koncepciója sem világos.
-
Jester01
veterán
válasz
WonderCSabo #2866 üzenetére
Méginkább nyilván egyikre sincs szükség mert az előző tagból simán adódik a következő. Azt hiszem kingabo is erre célzott.
-
eriktoth
tag
Lényeg, hogy beadsz neki egy számot és ki kell számolnia az arsin-t de úgy hogy nem használhatsz matematikai képleteket
-
kingabo
őstag
válasz
eriktoth #2862 üzenetére
Pedig az arcsin-ben van faktor számítás: [link]
Viszont ezt egy sima for ciklussal sokkal könnyebben ki tudod számítani. (egy kis gondolkodás után az x ^ (2n+1)-re is kapsz egy szép iterációs képletet) Illetve azt ne felejtsd el, hogy a szigma itt egy limeszt jelent, vagyis pontos értéket nem nagyon fogsz kapni. Nekem párhuzamosan több gépen kellett sin-t számolni (pp-ből ilyen fantázia dús feladatot kaptunk), ott ha túl nagy számot adtunk meg x ^ (2n+1) igen hamar túlcsordult, ha túl kicsit, nagyon hamar átlépte a gép 0-át. (az a legkisebb 0-nál nagyobb szám, amit a gép még tud ábrázolni)
(#2863) WonderCSabo: én is így látom.
-
eriktoth
tag
válasz
ArchElf #2854 üzenetére
Lényegiben a faladat több részből áll de a fő dolgok, hogy összeadass,kivonás, osztás, szorzás segítségével kell kiszámítani egy arcsin függvényt és egy logaritmus függvényt, ez a lényeg aztán meg van olyan hogy szakasz kiszámítása, és paraméterekkel kell beadni hogy mit akarsz kiszámolni de az mar más tészta
-
Neoteric
addikt
válasz
Sk8erPeter #2859 üzenetére
Hasznos oldal, köszi!
Amit ott írnak EOF-nak (end of file) mi az a megfelelője, ami akkor jó, ha te magad írod be a szöveget is, nem pedig fájlból olvasol be? Szal addig menjen a while amíg véget nem ér az előzőleg általam beírt szöveg. -
Sk8erPeter
nagyúr
válasz
Neoteric #2856 üzenetére
"egyetemen tanítják most a C++-t"
Viszont ez a C topic... Van külön C++ programozásáról szóló topic is.Itt találhatsz az 1.5.4-es pontban egy szószámlálós példakódot (sima C-ben): [Kernighan-Ritchie: A C programozási nyelv]
Ehhez hasonló a Te feladatod is, csak Te nem szóközöket, tabulátorokat és sortöréseket keresel, hanem pontokat, felkiáltójeleket, kérdőjeleket, és azt, hogy ezek valamelyike után nagybetű szerepel-e.
Angol karakterek esetén nagybetű-ellenőrzésre pl. ott az isupper függvény: [link]. -
WonderCSabo
félisten
válasz
Neoteric #2856 üzenetére
lordfreyr: Nem lehetséges. Csinálj egy structot, és azt rakd be egy tömbbe.
Szerk.: Vagyis lehetséges, polimorfizmussal, de sztem Te nem erre gondoltál.
Illetve hogy tudom az előbbi módon eltárolt értékeket eltárolni a programban annak kilépése után is azok fájlba írása nélkül?
Ezt nem is értem hogy gondoltad. Fájlba írás nélkül semmit se tudsz eltárolni. A program futásakor az össze lefoglalt memória felszabadul, de ha mégsem, akkor áramtalanításkor mindenképp. De amúgy se érheted már el normális esetben ezeket a területeket. Fájlba kell kimenteni.
-
Rickazoid
addikt
Üdv!
C-ben szeretnék két dimenziós tömbben eltárolni különböző típusú értékeket. Lehetséges ez? Ha igen, hogy, ha nem, hogy lehetne ugyanezt az eredményt elérni? Lényegében egy adatbázist kéne csinálnom, de minél többet gondolkodok rajta, mintha annál távolabb kerülnék a megoldástól. Talán csak túl bonyolítom, nem tudom.
Illetve hogy tudom az előbbi módon eltárolt értékeket eltárolni a programban annak kilépése után is azok fájlba írása nélkül?ui.: ANSI C-ben kellene.
-
Neoteric
addikt
Halihó
Új vagyok még a témában, egyetemen tanítják most a C++-t és adják a házikat ezerrel, viszont megfeneklettem, mert fogalmam sincs mi merre.
Adott ez a feladat:
Egy tetszőleges szövegről add meg, hány mondat található benne. Mondatnak tekintünk minden olyan sort, ami nagybetűvel kezdődik, és ponttal, felkiáltójellel vagy kérdőjellel végződik.Eddig csak számokkal való különböző műveleteket csináltam, és még csak fejben sem tudom összerakni ezt a dolgot.
Egy kis segítség jól jönne! -
eriktoth
tag
Elírtam a faktoriálisnak nem kell ott lenni, viszont az az egészben a kicseszés, hogy semmilyen matematikai függvényt nem használhatunk :S
-
-
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)....... -
kingabo
őstag
válasz
chabeee #2839 üzenetére
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.
-
chabeee
aktív tag
válasz
WonderCSabo #2843 üzenetére
jaj, köszönöm!
-
chabeee
aktív tag
végül is tök mindegy csak kíváncsi voltam rá írtam helyette 2 ciklust!
-
chabeee
aktív tag
válasz
WonderCSabo #2840 üzenetére
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
aktív 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
-
eriktoth
tag
Üdv!
Valaki tudna mondani valamit az INFINITY fügvényről? -
dany27
őstag
válasz
Sk8erPeter #2835 üzenetére
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
-
-
Jester01
veterán
-
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!
-
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.
-
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;
} -
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!
-
Jester01
veterán
válasz
TheRolf #2825 üzenetére
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';
-
TheRolf
csendes tag
válasz
WonderCSabo #2824 üzenetére
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...
-
TheRolf
csendes tag
válasz
Jester01 #2815 üzenetére
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!
-
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
válasz
TheRolf #2813 üzenetére
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 palindromMOD: * úgy értem, ha a kingabo által fentebb jelzett hibát javítod
-
kingabo
őstag
válasz
TheRolf #2813 üzenetére
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. -
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");
}
} -
WonderCSabo
félisten
válasz
eriktoth #2811 üzenetére
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.
-
eriktoth
tag
válasz
WonderCSabo #2810 üzenetére
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
-
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
-
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'
Ú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!
- Dell Latitude 5450 Intel Core Ultra 5 135U 4nm 32GB DDR5 érintőképernyős laptop Dell gari 2027.09.hó
- PlayStation 4/5 kontroller analóg cseréje HALL TMR érzékelősre, 1 év garancia!!! Nincs többé drift!!
- PlayStation 5/4 kontroller analóg cseréje HALL TMR érzékelősre, 1 év garancia!!! Nincs többé drift!!
- XBOX ONE/Series kontroller analóg cseréje HALL TMR érzékelősre, 1 év garancia!!! Nincs többé drift!!
- XBOX Series S 512GB, 6 hó garanciával Bp-i üzletből eladó!
- Szinte új, minőségi, állítható ritkítóolló
- Bomba ár! Dell Latitude E5550 - i5-5GEN I 8GB I 128GB SSD I 15,6" FHD I W10 I HDMI I Cam I Gari!
- Xiaomi Redmi Note 13 256GB, Kártyafüggetlen, 1 Év Garanciával
- Csere-Beszámítás! RGB Számítógép PC játékra! R5 5600X / RTX 3060Ti 8GB / 32GB DDR4 / 500GB SSD
- Microsoft Surface Book 3 - 15 col, i7, 32GB, GTX1660Ti
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest