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ó Spyra: akkus, nagynyomású, automata vízipuska
- 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
Általános témák
LOGOUT.hu témák
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [ldave:] New Game Blitz - 2024
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [sziku69:] Szólánc.
- [Re:] Gurulunk, WAZE?!
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [Szevam:] Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
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
szkorhetz
őstag
Ha nem nagy kérés, akkor lennél kedves ezt az egész programot beilleszteni nekem?
köszönöm
chabeee
tag
persze ha készen lesz de az kb még 1-2 nap attól függ hogy lesz időm,de postolni fogom
TheRolf
csendes tag
Sziasztok! C-ben meg lehet olyat oldani, hogy bekér N és M-t, majd egy NxM-es mátrix elemeit is, de soronként, tehát ne kelljen NxM darab entert nyomni, csak annyit, ahány sor van; magyarul a scanf(" ") belsejében meg tudom-e valamilyen módon adni, hogy hány %d-t kérjen be?
Köszi előre is!
Jester01
veterán
Nem, ez lehetetlen!
Micsoda hülye kérdés, persze, hogy meg lehet. A scanf alapesetben nem is tesz különbséget a white space karakterek között tehát hidegen hagyja hány sorban írod be. Egyszerűen ciklusban hívd annyiszor ahányszor kell.
Jester
TheRolf
csendes tag
Köszi!
chabeee
tag
bedobtam mindent egy txt-be.
lehet vannak benne kisebb hibak, azokert elnezest.
ez meg csak a kettes szint ha kell a tovabbi kod irj es kuldom
udv csabi
[ Szerkesztve ]
szkorhetz
őstag
Szia, lehet, hogy nálam van a hiba, de amint elindítom a programot, nem történik semmi, csak megy a kurzor, de semmit nem tudok írni bele, meg semmi..
chabeee
tag
@szkorhetz> nalam jo, lehet azert nem megy mert linuxon irtam. igaz ezzel nem kene problema lenni
valaki nem tud mondani egy string to int konvertal fuggvenyt?
megvan mar!
a fv neve > atoi
[ Szerkesztve ]
Korcsii
őstag
atoi ?!
chabeee
tag
igen kozbe megtalaltam koszonom!
Rickazoid
addikt
Nálam először -1 hibakódot dobott a Code::Blocks, aztán rájöttem, hogy nincs bemenet.txt fájl. Erre nem írsz egy ellenőrzést, hogy ilyenkor se hibával lépjen ki? Ha jól gondolom ez iskolai feladat, oda nem árt ilyesmit beleírni, hátha beleköt a tanár (persze lehet nem, te ismered jobban). De egyébként is jobb (főleg később), ha az ember úgy írja a programjait, hogy hibánál (már amelyiket előre meg lehet jósolni) figyelmeztessen rá, "szóljon", hogy mi a gond.
[ Szerkesztve ]
Erkölcstelen csíkot húzni a másik krumplifőzelékébe csak azért, hogy legyen egy szünet.
WonderCSabo
félisten
Miért nem inkább boolokat tárolsz?
chabeee
tag
@lordfreyr
igen a bemenet.txt-t odaírtam megjegyzésbe. igazából szoktam írni rá, de ez csak egy gyors gyak volt.
@WonderCSabo
más feladatoknál ezt írtam és ez maradt bennem, meg ugye nem mindegyiknél 0 és 1 a fájl tartalma.
amúgy itt a feladat: [link]
WonderCSabo
félisten
Megnéztem a feladatot, el is olvastam, és elég a mátrixban boolt tárolni.
chabeee
tag
igen ennel a feladatsornal jo
chabeee
tag
hali!
dog kutya
donkey szamar
content tartalom
apple alma
good jo
diamond gyemant
Ezeket a szópárokat szeretném abc sorrendbe rendezni angol szavak alapján, milyen módon lehetne ezt véghez vinni?
Jester01
veterán
Rengeteg módon. Például csinálsz egy struct-ot amiben benne van a magyar és az angol szó. Ezután qsort hívással, a megfelelő összehasonlító függvény megadásával, berendezed:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct entry
{
const char* eng;
const char* hun;
};
static int compare_entries(const void* a, const void* b)
{
const struct entry* e1 = a;
const struct entry* e2 = b;
return strcmp(e1->eng, e2->eng);
}
int main()
{
struct entry words[] = {
{ "dog", "kutya" },
{ "donkey", "szamar" },
{ "content", "tartalom" },
{ "apple", "alma" },
{ "good", "jo" },
{ "diamond", "gyemant" }};
const int count = sizeof words / sizeof words[0];
int i;
qsort(words, count, sizeof words[0], compare_entries);
for(i = 0; i < count; ++i)
{
printf("%s %s\n", words[i].eng, words[i].hun);
}
return 0;
}
Jester
Shuzen
csendes tag
Segmentation fault miatt elégtelen lenne a kódod, ha osztályoznák ( terminálban futtatam egy valgrindot).
chabeee
tag
hát az csoda mert nálam nem ír szegmentálási hibát, terminálba futtattam valgrindot használva
@Jester01
köszi ezt meglesem
[ Szerkesztve ]
dany27
őstag
Sziasztok!
GTK segítségével készítek egy alkalmazást.
Egy olyan kérdésem lenne hogy a szöveg beviteli mezőből kinyert szöveget milyen adat típusba tudom belepakolni?
Mert ezért reklamál:
char test[100];
test=gtk_entry_get_text(GTK_ENTRY(szerzo));
előre is köszi!
Jester01
veterán
Szépen elbaktatsz a megfelelő headerbe és megnézed:
G_CONST_RETURN gchar* gtk_entry_get_text (GtkEntry *entry);
Vagy nyilván a dokumentációban.
[ Szerkesztve ]
Jester
dany27
őstag
Közben ezt én is megtaláltam de akkor milyen változót hozzak neki létre amibe bele is tudom pakolni?
Egy ilyent találtam még a GTKs fejlesztői doksiban typedef char gchar;
dany27
őstag
ha beszúrom az headerek után akkor egyből kidobja h redefinied... pedig nincs benne sehol még!
Jester01
veterán
Értelemszerűen egy const gchar* típusú változót. Ami, mint ahogy te is megtaláltad, egy typedef a mezei const char* típusra. Amennyiben másolatot akarsz, akkor a string függvények (strncpy, strdup) megfelelő alkalmazásával ezt is megteheted.
Jester
dany27
őstag
Error redifinition of typedef gchar...
Ezt írtam be egyből a headerek includeolása után: typedef char gchar;
Sk8erPeter
nagyúr
Pont azt mondja a hibaüzenet (elég beszédes), hogy már definiálva van...
--> [link]
és ha az alábbi módon próbálod?
GtkEntry *entry;
const gchar *test;
entry = GTK_ENTRY(szerzo);
test = gtk_entry_get_text(entry);
(még nem használtam, csak az alapján gondolom, hogy így jó, ami a doksiban van, nem garantálom, de sanszos)
Szerk.: de épp így csinálják itt is: [link] (ebből a kódból gondolom amúgy is tudnál mintát venni)
[ Szerkesztve ]
Sk8erPeter
Ez biztos hulye kerdes lesz, de van valahol egy osszefoglalo arrol, hogy mik a C-ben hasznalt "modosito" karakterek es melyik mire valo a kulonbozo szituaciokban?
Gondolok itt olyanokra, hogy:
char *p
FILE be*
fscanf(stream, "%d%*[^\n]", &valtozo)
for(p=str;*p&&*p!=10;p++); *p=0;
Ezek csak ilyen hirtelen kiragadott peldak, tudom, hogy magukban nincs sok ertelmuk, de remelem ertitek mire gondolok.
Mikor doksit keresgetek nem nagyon latom ezek jeloleset, csak altalanos leirast pl. a char tipusrol.
Peldakodokat nezegetve is mindig az a bajom, hogy nem vagom ezek mit csinalnak, ugy meg nehez megerteni.
Ha tudnatok ehhez egy jo linket ajanlani azt megkoszonnem.
szkorhetz
őstag
Sziasztok!
Megnéznétek ezt nekem? ha esetleg valami hiba van, akkor javítást is nagyon szívesen fogadok, sőt örülnék is minden apró kis segítségnek is
#include<stdio.h>
#include <stdlib.h>
struct egybe{
int a;
char c[92];
char sz[92];
};
void feltoltc(egybe*, int sor);
void feltoltsz(egybe*, int sor);
void rendez(egybe*, int sor);
void rendezve();
void ujfilm();
int main(){
int holsor = 0;
egybe tomb[92];
egybe sege[92];
int azon;
int menu;
bool vanilyen = false;
rendezve();
ujfilm();
while(menu != 5) {printf("Fomenu:\nKerem valasszon egyet a kovetkezo menupontok kozul!\n\n1: Uj adat felvetele\n2: Modositas\n3: Kereses\n4: Lista\n5: Kilepes\n\n");
scanf("%d", &menu);
switch(menu){
case 1: {
vanilyen = 0;
printf("Adja meg az azonositot: ");
scanf("%d", &azon);
if(!holsor){tomb[holsor].a = azon;}
for(int f = 0; f < holsor; f++){
if (tomb[f].a == azon){printf("Mar van ilyen azonosito!\n"); vanilyen = true; break;}
else {tomb[holsor].a = azon;}}
if (vanilyen){break;}
printf("Adja meg a a film cimet: ");
feltoltc(sege,holsor);
feltoltc(tomb,holsor);
printf("Adja meg a gyartasi evet: ");
feltoltsz(tomb,holsor);
holsor++;
printf("\n\nAz uj adat mentese sikeres!\n\n\n");
break;
}
case 2: {
int modosit;
bool vane = 0;
printf("Adja meg az azonositot: ");
scanf("%d", &modosit);
for(int x = 0; x < holsor; ++x){
if (tomb[x].a == modosit){printf("Adja meg a a film cimet: ");
feltoltc(sege,x);
feltoltc(tomb,x);
printf("Adja meg a gyartasi evet: ");
feltoltsz(tomb,x);
printf("\n\nModositas vegrehajtva!\n\n\n");
vane = 1;}}
if(!vane){printf("\n\nNincs ilyen azonosito!\n\n");}
break;}
case 3: {
int keres;
bool talalt = 0;
printf("Adja meg az azonositot: ");
scanf("%d", &keres);
for(int x = 0; x < holsor; ++x){
if (tomb[x].a == keres){printf("Azonosito: %d\t A film cime: %s\t Gyartasi ev: %s\n\n", tomb[x].a, tomb[x].c, tomb[x].sz);talalt = 1;}}
if (!talalt){printf("\n\nNincs talalat!\n\n");}
break;}
case 4: {
rendez(tomb, holsor);
for (int j = 0; j < holsor; j++){printf("Azonosito: %d\t A film cime: %s\t Gyartasi ev: %s\n", tomb[j].a, tomb[j].c, tomb[j].sz);}
break;}
case 5: {break;}
default: {printf("Hibas azonostito"); break;}
};
}
}
void ujfilm()
{
}
void feltoltc(egybe t[], int sor){
char szov;
int j=0;
while((szov = getchar()) != '\n'){t[sor].c[j] = szov; j++;}
t[sor].c[j] = '\0';
};
void feltoltsz(egybe t[], int sor){
char szov2;
int k = 0;
while((szov2 = getchar()) != '\n'){t[sor].sz[k] = szov2; k++;}
t[sor].sz[k] = '\0';
};
void rendezve(){
ujfilm();
}
void rendez(egybe t[], int sor){
egybe seg[92];
int z = 0;
for(int i = 0; i < sor; i++){
z++;
for(int j = z; j < sor; j++){
if(t.a > t[j].a){
seg(i).a = t(i).a;
t(i).a = t[j].a;
t[j].a = seg(i).a;
for(int k = 0; k < 92; ++k){
seg(i).c[k] = t(i).c[k];
t(i).c[k] = t[j].c[k];
t[j].c[k] = seg(i).c[k];
seg(i).sz[k] = t(i).sz[k];
t(i).sz[k] = t[j].sz[k];
t[j].sz[k] = seg(i).sz[k];}
}
}
}
};
Sk8erPeter
nagyúr
Előbb nézzen ki normálisan a kódod.
Ajánlom ezt az oldalt:
http://indentcode.net/
Ide meg a kódot normális kinézettel úgy illeszd be, hogy kijelölöd, majd megnyomod a Programkód gombot. Különben senki nem fogja ezt neked átnyálazni. Vagy rakd fel pastebinre, és nyomj rá a C-s szintaktika-kiemelésre.
Sk8erPeter
Sk8erPeter
nagyúr
Nem, az ilyen *,& stb-re gondoltam.
Mondjuk most a legjobban az erdekelne, hogy hogyan lehet a matematikai fuggvenyeket hasznalni "-lm" kapcsolo nelkul forditaskor, mert a biro nem fogja hasznalni, en meg nem igazan tudok pl. egy sqrt()-t megirni, de meg csak neten se talalok sehol egy hasznalhato fuggvenyt.
-lm nelkul meg undefined reference to `sqrt' hibat dob, mondjuk a vicc az, hogy ha ugyanabban a sorban printf("%f\n", sqrt(16)) formaban hasznalom akkor fordul, de a valami = sqrt(16)-al mar nem s ez az egy akadalyoz meg abban, hogy kesz legyek a kot. progival.
[ Szerkesztve ]
WonderCSabo
félisten
includeoltad a math.h-t ?
Szerk.: A * &, stb-re link, de először kéne a fogalmakat megtanítani, és azután a jelölést, mert fordítva megérteni baromira nehéz.
[ Szerkesztve ]
Persze, includeoltam, gugliban rakeresve kismillio helyen irjak ezt a problemat, a megoldas mindenhol az, hogy forditsuk a "-lm" kapcsoloval, amivel valoban mukodik, de igy nem adhatom be a bironak mert nem azzal fogja forditani.
Kosz a linket, ha mar tudom, hogy melyik fogalmat takarja a jeloles akkor utananezek a fogalomnak(pl. kozbe rajottem, hogy a "char *valami" egy pointer, megneztem mik a pointerek s igy mar vilagos(abb)), de addig nehez.
[ Szerkesztve ]
Sk8erPeter
nagyúr
Miért, ott kiszedik az -lm kapcsolót?
Ha az
#include <math.h>
sort nem hagytad ki, sajnos elvileg ekkor is kellene az -lm kapcsoló: [link].
Nem úgy működik, hogy feltöltöd a .c fájlodat, azt meg ott lefordítják?
Elég idióta dolog lenne, ha ott kiszednék ezt a kapcsolót a hallgatókkal való kiszúrásdiból. Vagy kikötötték, hogy nem használhatsz math.h-s függvényeket, vagy mi? Az sqrt() nem olyan, amit tiltani szoktak.
"Nem, az ilyen *,& stb-re gondoltam"
Olvasd el ezt a fejezetet: [link].
===
(#2935) Korcsii : "off: ui: cportán debugolni rulz" hell yeah!
[ Szerkesztve ]
Sk8erPeter
Korcsii
őstag
Csak egyszer adható be? Mert szerintem meg kéne próbálni, hogy lefordul-e ott.
off: ui: cportán debugolni rulz
"A kötelező programot a Bíró fogja kiértékelni. Feltöltés után a Bíró programot a gcc fordítóval
-static -O2 paraméterezéssel lefordítja, majd a programot 10 különböző tesztesetre futtatja."
Szoval feltoltom a .c fajlom, de fix parameterekkel forditja(ugye a biro is egy program), emiatt ilyenkor csak ennyit ad vissza:
"Fordítási hiba!
További információk a compile.txt állományban olvashatók."
Ezert mikozben irom/tesztetelem en is mindig
"gcc -O2 -static -o progineve forras.c -Wall -pedantic"
kapcsolokkal forditom, hogy ne erjen meglepetes.
Korcsii: 10-szer adhato be s kiprobaltam, lasd ezen hsz-em egy kicsit feljebb.
[ Szerkesztve ]
Meghackeltem, a Biro is megkajalta max pontszammal, vegre.
Mivel nekem csak "int"-kent volt szuksegem a negyzetgyokre, igy a kovetkezo hack bevalt:
int f_sqr(int szam){
return szam*szam;
}
int f_sqrt(int szam){
int i, hatvany;
for(i = 1; hatvany < szam ; i++){
hatvany = f_sqr(i);
}
return i - 1;
}
WonderCSabo
félisten
Pedig az f_sqrt fv-ed rossz, konstans 0-át ad vissza, mert a hatvanynak nem adtál kezdőértéket, és úgy vizsgálod.
Valoban, jelzett is a gcc, de akkor nem ertettem hirtelen mi a baja, most mar felfogtam, koszi.
[ Szerkesztve ]
Sk8erPeter
nagyúr
Ennek tükrében viszont elég érdekes, hogy "a Biro is megkajalta max pontszammal", ha full hibás, és még fordítási hibát is jelzett...
Nálunk egy BME-s programnál (Cporta) bármilyen fordítási hiba volt tapasztalható, nem fogadták el. (Lehet, hogy azóta enyhítették ott is.)
Sk8erPeter
Ez csak warning volt, nem error, gondolom emiatt fogadta el, meg ettol meg most pont jol mukodott, szerencsemre.
Biro ha jol tudom csak azt nezi, hogy a kimenet egyezik-e az elore definialtal, itt legalabbis, kesobb gondolom komolyabbak lesznek az elvarasok, de ez meg csak az 1. szemeszter.
Korcsii
őstag
Cporta is a kimenetet figyelni (főleg), de szerintem a warningokat is figyelni...
(#2943) WonderCSabo válasza Sk8erPeter (#2940) üzenetére
WonderCSabo
félisten
Ez nem fordítási hiba, még warning sem.
[ Szerkesztve ]
szkorhetz
őstag
#include<stdio.h>
#include <stdlib.h>
struct egybe {
int a;
char c[92];
char sz[92];
};
void feltoltc(egybe *, int sor);
void feltoltsz(egybe *, int sor);
void rendez(egybe *, int sor);
void rendezve();
void ujfilm();
int main()
{
int holsor = 0;
egybe tomb[92];
egybe sege[92];
int azon;
int menu;
bool vanilyen = false;
rendezve();
ujfilm();
while (menu != 5) {
printf("Fomenu:nKerem valasszon egyet a kovetkezo menupontok kozul!nn1: Uj adat felvetelen2: Modositasn3: Keresesn4: Listan5: Kilepesnn");
scanf("%d", &menu);
switch (menu) {
case 1:{
vanilyen = 0;
printf("Adja meg az azonositot: ");
scanf("%d", &azon);
if (!holsor) {
tomb[holsor].a = azon;
}
for (int f = 0; f < holsor; f++) {
if (tomb[f].a == azon) {
printf("Mar van ilyen azonosito!n");
vanilyen = true;
break;
} else {
tomb[holsor].a = azon;
}
}
if (vanilyen) {
break;
}
printf("Adja meg a a film cimet: ");
feltoltc(sege, holsor);
feltoltc(tomb, holsor);
printf("Adja meg a gyartasi evet: ");
feltoltsz(tomb, holsor);
holsor++;
printf("nnAz uj adat mentese sikeres!nnn");
break;
}
case 2:{
int modosit;
bool vane = 0;
printf("Adja meg az azonositot: ");
scanf("%d", &modosit);
for (int x = 0; x < holsor; ++x) {
if (tomb[x].a == modosit) {
printf("Adja meg a a film cimet: ");
feltoltc(sege, x);
feltoltc(tomb, x);
printf("Adja meg a gyartasi evet: ");
feltoltsz(tomb, x);
printf("nnModositas vegrehajtva!nnn");
vane = 1;
}
}
if (!vane) {
printf("nnNincs ilyen azonosito!nn");
}
break;
}
case 3:{
int keres;
bool talalt = 0;
printf("Adja meg az azonositot: ");
scanf("%d", &keres);
for (int x = 0; x < holsor; ++x) {
if (tomb[x].a == keres) {
printf("Azonosito: %dt A film cime: %st Gyartasi ev: %snn", tomb[x].a, tomb[x].c, tomb[x].sz);
talalt = 1;
}
}
if (!talalt) {
printf("nnNincs talalat!nn");
}
break;
}
case 4:{
rendez(tomb, holsor);
for (int j = 0; j < holsor; j++) {
printf("Azonosito: %dt A film cime: %st Gyartasi ev: %sn", tomb[j].a, tomb[j].c, tomb[j].sz);
}
break;
}
case 5:{
break;
}
default:{
printf("Hibas azonostito");
break;
}
};
}
}
void ujfilm()
{
}
void feltoltc(egybe t[], int sor)
{
char szov;
int j = 0;
while ((szov = getchar()) != 'n') {
t[sor].c[j] = szov;
j++;
}
t[sor].c[j] = '
[link]
[ Szerkesztve ]
(#2945) Sk8erPeter válasza WonderCSabo (#2943) üzenetére
Sk8erPeter
nagyúr
Ja, sorry, akkor félreértettem azt a mondatrészt, hogy "jelzett is a gcc"... nyilván nem a függvény hibás mivoltára mondtam, hogy fordítási hiba, amikor az rossz eredményt ad vissza, hanem az esetleges warningokra, errorra, amit kaphatott akkor, amikor inicializálatlan változója volt..
(#2944) szkorhetz : hát látom ez nem jött össze....
Pedig annyira nem nehéz... kijelölöd a programkódot, majd azután rákattintasz a Programkód gombra, ez a nagy mágia...
Sk8erPeter
dany27
őstag
sziasztok!
Adott egy láncolt lista. Hogyan tudom helyben megfordítani, azaz nem használok segédlistát hozzá??
Előre is köszi!
Jester01
veterán
Lassan!
Jester
dany27
őstag
bővebben?
Jester01
veterán
Tulajdonképpen van segédlista, csak az az eredeti lista csomópontjait használja. Vagy az nem ér?
Jester
dany27
őstag
Úgy csináltam és vissza dobták h nem szabad segédlistát használni...
Így csináltam:
szamok megfordit(szamok *lista) {
szamok *i, *kov, *elso=NULL;
for (i=lista; i; i=kov) {
kov = i->kov;
i->kov = elso;
elso = i;
}
return elso;
}
Így hívom meg:
lista=megfordit(lista)
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!