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:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [bitpork:] Fogyasztásra ítélve
- [Re:] [bobalazs:] RTX 4070 Super Undervolting and Overclocking Alulfeszelés és túlhajtás
- [Re:] [sh4d0w:] Rebel Moon - Ne nézd meg!
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [CPT.Pirk:] "Fényhűtés" ciksorozat (tuningnet.hu)
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [Luck Dragon:] MárkaLánc
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Téma összefoglaló
- Utoljára frissítve: 2014-04-25 14:12:00
LOGOUT.hu
Hozzászólások
amargo
addikt
Hopp ezt csúnyán benéztem/ figyeltem..
char s[20]={0};
fscanf(stdin, "%[a-z]", s);
Ezt kerested?
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
blaces
tag
/* Feladat:
Írjunk programot, amely kiszámolja és kiírja egy gépkocsi fékútját a sebesség és
az útviszonyok függvényében. A feltételezett lassulás:
a) normál úton: 4.4
b) vizes úton: 3.4
c) vizes, nyálkás úton: 2.4
reakcióidő: 1 másodperc
A gépkocsi kezdő sebessége bemenő adat.*/
#include <stdio.h>
main()
{
double b, v, aa=4.4, ab=3.4, ac=2.4, s, s1, s2; /* aa=normál út, ab=vizes út, ac=vizes, nyálkás út */
int t=1, menu;
//Menü létrehozása, hogy mely útviszonyok között számoljon a program
printf ("Melyik utviszonyt vizsgáljam?\n 1-Normal ut,\n 2-Vizes ut,\n 3-Vizes, Nyalkas ut\n");
scanf ("%d", &menu);
switch (menu)
{
case 1:
{
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
s2=v*v/2*aa;
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);
break;
}
case 2:
{
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
break;
}
case 3:
{
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
break;
}
default:
{
printf("Hiba\n");
break;
}
}
getch();
return 0;
}
Hibalista:
C:\Documents and Settings\hallgato\Dokumentumok\utviszony.c In function `main':
18 C:\Documents and Settings\hallgato\Dokumentumok\utviszony.c syntax error before '/' token
18 C:\Documents and Settings\hallgato\Dokumentumok\utviszony.c stray '\252' in program
aztán így tovább csak a számok különböznek... a 252 helyett 246 és stb.
Úgy építettem fel mint az órán csináltuk az egyik feladatot, de ott nem rinyált (igaz ott megjegyzést sem tettem be) itt nem tudom hogy mi a baj.
blaces
tag
Mivel erősen az órai vázlatra építettem, ezt hogyan lehetne szebben is megírni, hogy a case ágakban ne ismétlődjön a képlet (mert csak az aa, ab, ac változokat kell módosítani).
Erre gondoltam, hogy if else else-vel készíteném el, hogy
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
if (választottmenüpont == 1) {
s2=v*v/2*aa;}
else (választottmenüpont ==2){
s2=v*v/2*ab;}
else (választottmenüpont == 3){
s2=v*v/2*ab;}
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);
(vázlatosan)
PazsitZ
addikt
getch() helyett használd a getchar() -t.
[ Szerkesztve ]
- http://pazsitz.hu -
doc
nagyúr
es ez miert szebb, mintha ugyanezt switch-csel csinalnad?
(amugy gondolom a 3. esetnel csak veletlenul irtal ab-t ac helyett)
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
switch (választottmenüpont)
{
case 1: s2=v*v/2*aa; break;
case 2: s2=v*v/2*ab; break;
case 3: s2=v*v/2*ac;break;
}
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);
vagy akar:
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
s2=v*v/2;
switch (választottmenüpont)
{
case 1: s2*=aa; break;
case 2: s2*=ab; break;
case 3: s2*=ac;break;
}
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);
blaces
tag
igen az elírás volt Nem kell a case 1: case 2: case 3: esetén nem kell {} jel? az enyémnél szerepel, így mutatták órán...
(ez tényleg szebb és egyszerűbb megoldás kösz )
Viszont ha getchar()-t írtam be akkor is ugyanaz a szintaktikai hibája van...
doc
nagyúr
nem kell {} case-nel, addig megy, amig break-be utkozik
az a syntaxishiba meg erdekes...
mindenesetre ha van pl. ekezetes karakter a file-ban, azt kivennem a helyedben, bar nem mondtam milyen fordito/ide, de ez kepes gondokat okozni...
blaces
tag
szintaktikai hiba megoldva csak a megjegyzést kellett kitörölnöm...
/* Feladat:
Írjunk programot, amely kiszámolja és kiírja egy gépkocsi fékútját a sebesség és
az útviszonyok függvényében. A feltételezett lassulás:
a) normál úton: 4.4
b) vizes úton: 3.4
c) vizes, nyálkás úton: 2.4
reakcióidő: 1 másodperc
A gépkocsi kezdő sebessége bemenő adat.*/
#include <stdio.h>
main()
{
double b, v, aa=4.4, ab=3.4, ac=2.4, s, s1, s2; /* aa=normál út, ab=vizes út, ac=vizes, nyálkás út */
int t=1, menu;
printf ("Melyik utviszonyt vizsgaljam?\n 1-Normal ut,\n 2-Vizes ut,\n 3-Vizes, Nyalkas ut\n");
scanf ("%d", &menu);
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6; /* km/h órát átkonvertálja m/s-ba */
s1=v*t;
switch (menu)
{
case 1: s2=v*v/2*aa; break;
case 2: s2=v*v/2*ab; break;
case 3: s2=v*v/2*ac; break;
default: printf("Hiba"); break;
}
s=s1+s2;
printf("Gepkocsi fekutja normal uton:\n");
printf ("s=%lf", &s);
getch();
return 0;
}
Eredményre mindig ezt dobja ki: s=0.00000
doc
nagyúr
printf ("s=%lf", &s); -> printf ("s=%lf", s);
blaces
tag
köszi
Van különbség a b/3.6=v (ebbe beleköt a fordító) és a v=b/3.6 művelet végrehajtása között?
azt akarom, hogy a v egy méter/sec egység legyen, mert a b km/h-ban van...
valahol valamit elszámol a program...
[ Szerkesztve ]
blaces
tag
már megvan
rallye
csendes tag
Sziasztok!
Az lenne a kérdésem, hogy sima c-ben, hogyan tudom pozícionálni a kiírást?
Például, hogyan tudnám kiírni a 2.sor 5.oszlopába vmit.
Valaki azt mondta nekem, hogy goto, de nem sikerült.
Pascalban gotoxy(x,y) volt, de itt nem működött nekem.
Előre is köszönöm a segítséget.
Jester01
veterán
Az attól függ, milyen operációs rendszer alatt.
Jester
rallye
csendes tag
XP-be, és visual studio 2003.
Jester01
veterán
Akkor a SetConsoleCursorPosition függvény kell neked és amúgy a Console Reference részt olvasgasd az msdnben.
Jester
rallye
csendes tag
Köszi szépen a segítséget!
rallye
csendes tag
Hát nem nagyon bírom életrekelteni.
Ha beleraktam a windows.h/wincon.h-t akkor sem ment.
#include <stdlib.h>
#include <conio.h>
#include <stdlib.h>
main() {
char x="3";
SetConsoleCursorPosition(2,2);
printf("%c",x);
getch();
}
Jester01
veterán
Megnézted hogyan kell használni? Nem x,y kell neki, hanem egy HANDLE meg egy COORD. Az msdn oldalon amit linkeltem van kész példa is.
Jester
Benmartin
senior tag
szia!
wincon.h-hoz szükséges windows.h, char != char*, azért x = '3'. SetConsoleCursorPosition() fvnek nem csak header kell, hanem library is(kernel32). valamint nem két int a paramétere, hanem:
BOOL WINAPI SetConsoleCursorPosition(
__in HANDLE hConsoleOutput,
__in COORD dwCursorPosition
);
ennek megfelelően így alakul a kód:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <wincon.h>
main() {
COORD kord;
HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
kord.X = 2;
kord.Y = 3;
char x = '3';
SetConsoleCursorPosition(hConsoleOutput,kord);
printf("%c",x);
getch();
}
rallye
csendes tag
Nagyonnagyon szépen köszönöm!
Jester01 neked is köszi! (Igen, elég felületesen néztem át, mert közben tanulok matek zh-ra csak közben evvel is haladnom kellene, és pihenés közben keresgéltem.)
rallye
csendes tag
Azt szeretném csinálni, hogy automatikusan leálljon a 10.mp-ben, de nem sikerült.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
clock_t clock(void);
main(){
double a;
getch();
a=clock()/CLOCKS_PER_SEC;
if(a>10.0){
printf("A program kezdete ota eltelt ido: %2.2f mp ezert leallt.",a);
getch();
return 0;}
else
printf("A program kezdete ota eltelt ido: %2.2f mp.",a);
getch();
}
[ Szerkesztve ]
Hali!
Ezt nézd meg, innen meríthetsz ihletet: [link]
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
rallye
csendes tag
Köszi szépen!
PazsitZ
addikt
Valamit biztos nagyon rosszul csinálok, de rég nem programoztam c-ben.
Szóval a lényeg az lenne, hogy átadjak egy stringet egy függvényből a main-be.
De ehelyett csak 1 karaktert hajlandó átadni .
#include <stdio.h>
char back[5];
char input()
{
char in[5]="Hello";
printf("%s \n",in);
return *in;
}
int main(int argc, char *argv[])
{
*back = input() ;
printf("%s \n",back);
return 0;
}
- http://pazsitz.hu -
doc
nagyúr
ahova csillagot raktal, onnan vedd ki, ahova nem tettel, oda meg rakjal be egyet
vagyis:
char *input()
return in
back = input()
viszont igy az elejen a back[5]="... resz nem szep, eleg ra sima char *back;
Jester01
veterán
Nagyon rossz ötlet lokális változó címét visszaadni ám.
Arról nem is beszélve, hogy a lezáró 0 bytenak is foglaljon helyet, mert abból is baj lesz.
Jester
doc
nagyúr
valoban nem szep/jo/biztonsagos, de nem akartam szegenyt megijeszteni a pointeres parameteradatasokkal
azt meg meg sem szamoltam milyen hosszu a string, de valoban 5 karakter, ugyhogy meg egy byte kene oda....
PazsitZ
addikt
Köszönöm a válasz elnézést, hogy csak most reagálok, de nem megy
pár warning után:
main.c: In function `input':
main.c:9: warning: function returns address of local variable
main.c: In function `main':
main.c:14: warning: assignment makes integer from pointer without a cast
Egy Segmentation Fault (core dumped) üzenetet kapok csak
- http://pazsitz.hu -
doc
nagyúr
masold be a modositott forrast, hadd nezzunk ra
foleg az utolso warning oka erdekel...
PazsitZ
addikt
Hmm, azóta változtattam rajta. Tudom nagyon béna vagyok.
Amúgy most látom, hogy van külön linux c topik is. Én most épp solaris allatt fordítok.
Jelen pillanatban ezt kapom vissza:
Hello
ا��o
ebből:
#include <stdio.h>
char *back;
char *input()
{
char in[6]="Hello";
printf("%s \n",in);
return in;
}
int main()
{
back = input();
printf("%s \n",back);
return 0;
}
[ Szerkesztve ]
- http://pazsitz.hu -
doc
nagyúr
a gond az, hogy igazabol nem tudom, mit szeretnel elerni
de kicsit atalakitottam, hogy azt csinalja amit szerintem szeretnel hogy csinaljon...
#include <stdio.h>
char *input(char *s)
{
strcpy(s,"Hello");
printf("%s \n",s);
return s;
}
int main()
{
char s[1024];
printf("%s \n", input(s));
return 0;
}
igy legalabb csunyarondafujnemszabad globalis valtozo sincs, meg lokalis valtozo visszaadasa, meg egyeb "ejnyebejnyekezedrecsapok" megoldasok...
PazsitZ
addikt
Hálásan köszönöm a segítséget! Így már jó.
Bocsi az amatörségem miatt .
- http://pazsitz.hu -
doc
nagyúr
egeszsegedre
az meg, hogy nem megy minden elsore nem amatorseg, max. tapasztalatlansag, idovel menni fog ;)
blaces
tag
Sziasztok!
Én csak annyit találtam a végtelen ciklusokról, hogy ha a feltétélük mindig igaz, akkor végtelen ciklus lesz. Csak akkor lép ki a feltételből ha az már hamissá teszi.
Ezek közül melyik végtelen ciklus és miért? hogyan értelmezi ezt a program? (az if-eset jól elmagyaráztatok anno)
a, i=10, while (i);
b, while (i=10) i;
c, for(x=1; x=10; x++);
d, for(x=1; x==10; x++);
Szerintem az a, c, d végtelen ciklus
doc
nagyúr
az elso harom a vegtelen, mivel ezekben a feltetel nem 0 (es ami nem 0, az a C-ben igaz)
eloszor ugye a feltetel az i valtozo, aminek az erteke 10, tehat igaz
a masodik esetben a feltetelben az i-be 10-et raksz, igy a kifejezes erteke is 10, tehat igaz
a c-nel ugyanaz az eset mint a masodiknal
a harmadiknal viszont egyszer sem fut le a ciklus, mivel a feltetel az, hogy i egyenlo 10-zel, de ez sosem teljesul (i erteke 1, igy be sem megy a ciklusba)
blaces
tag
Kösz az első kettőnél vágom, hogy akkor hogyan lehet igaz a feltétel
A harmadiknál értem, hogy miért nem megy be a ciklusba, mivel ott igazából nincs feltétel, csak kétszer lett megadva az x, de azt nem értem, hogy miért végtelen
A negyedik azért véges, mert addig csinálja amíg egyenlő lesz 10-el az x, de amint 11 lesz az x értéke akkor 0 lesz, azaz hamis, így véges a ciklus
Cathfaern
nagyúr
3.: C-ben egy értékadás mindig visszatér igaz eredménnyel*, emiatt lesz végtelen.
*itt egy kérdésem lenne nekem is: van arra lehetőség, hogy hamis legyen? Szóval kvázi nem sikerül az értékadás? Ha igen, mitől, milyen esetben?
doc
nagyúr
nem egeszen, nem igazzal ter vissza, hanem a szobanforgo ertekkel
igy pl. az a=0 erteke 0 lesz
doc
nagyúr
no, a harmadik:
elso lepesben i erteke 1 lesz
utana megvizsgalja a feltetelt (mivel a C-s for ciklus lenyegeben egy specialis while), a feltetel pedig az, hogy i erteke legyen 10, ami a 10-es erteket adja vissza, ami ugye igaznak szamit, es ezt minden egyes ciklusban vegrehajtja (vagyis i erteke mindig 10)
a negyediknel meg nem egeszen az a szitu, eloszor ugye i 1 lesz, utana ellenorzi a feltetelt, es akkor megy bele a ciklusba (szep parasztosan megfogalmazva) ha i erteke 10, de mivel nem annyi, igy sosem hajtodik vegre a ciklusmag
blaces
tag
köszi, köszi, vágom a harmadikat, és a negyediknél akkor igazából le sem fut a ciklus, hát ez így rohadt jó, már értem ezt is, hogy hogyan működik a C-ben
Steve-S
tag
Hi all!
A kérdésem:
Van egy függyvény definíció: double tombatlag(double *tomb)
ez kiszámítaná a tömb eleminek az átlagát és visszaadja azt. Azt nem tudom hogy hogy kellene az elem összeadó ciklusnak megadni azt hogy meddig menjen, magyarán mennyi a tömb mérete, vagy hogy hol van a tömb vége, anélkül hogy ezt megadnánk a függvénynek paraméterként, vagy a ciklusváltozóban beírnám a feltételnél az elemszámot?
Itt van egy példa amelyben kiszámolja amennyiben tudom a tömb méretét, de nekem az a verzió kéne mikor nem tudom előre a méretet. Egyáltalán van erre valamilyen módszer C-ben? Sok mindent próbálgattam már, de eddig nem volt jó semmi.
double tombatlag(double *tomb)
{
double osszeg=0;
int j, db=0;
for(j=0;j<5;j++)
{
osszeg += *tomb++;
db++;
}
return osszeg/db;
}
Set The World On Fire!!!
doc
nagyúr
jol latod a szitut
C-ben ha nem tudod elore a tombod meretet, akkor vagy atadod plusz parameterkent a meretet, vagy hasznalod a stringeknel alkalmazott megoldast, vagyis valahogy jelolod a veget
szamoknal az elso variacio jatszik
Steve-S
tag
Akkor csak jól sejtettem De ez mi szar mán nem?
Set The World On Fire!!!
doc
nagyúr
miert lenne szar? ha ilyesmit akarsz, arra vannak megfelelo adatstrukturak, a sima tomb az gyakorlatilag csak egy mutato
ha neked masra van szukseged, akkor mast hasznalj
Orc
senior tag
[link] Erre van valakinek ötlete?
Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!
Hali!
Remélem erre gondoltál, lista-szerkezetnek vagy láncolt listának(ahogy tetszik) hívják.
#include <stdio.h>
#include <stdlib.h>
struct Alma {
int value;
struct Alma *next;
};
int main()
{
struct Alma KORTE[2];
KORTE[0].value=10;
KORTE[0].next=&KORTE[1];
KORTE[1].value=20;
KORTE[1].next=NULL;
printf("Korte 1 erteke: %d\n",KORTE[1].value);
(KORTE[0].next)->value=30;
printf("Korte 1 erteke uj ertke: %d\n",KORTE[1].value);
return 0;
}
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Orc
senior tag
Nem egészen erre gondoltam, hanem valami ilyesmire:
alma.h
class alma
{
public:
int szin;
virtual int kiir();
...
};
class körte : public alma
{
public:
int meret;
körte(int szin,int meret);
...
};
main.cpp:
cin>>meret;
cin>szin;
Node* a;
a<<körte(szin,meret);
Valami ilyesmi kellene, csak az a kérdés, hogy milyen típusú listával tudom ezt megtenni...
Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!
Hali!
Akkor remélem ez megfelel, másra már nem tudok gondolni...
Bocsi ha megint mellétrafálnék...
#include <iostream>
using namespace std;
typedef class T_ALMA {
int i, j;
public:
void beallit(int a, int b) {
i = a;
j = b;
}
void almakiir() {
cout << "En a T_ALMA vagyok: ";
cout << i << " " << j << endl;
}
}ALMA;
typedef class T_KORTE : public ALMA {
public:
void kortekiir() {
cout << "En a T_KORTE vagyok\n";
}
}KORTE;
int main()
{
KORTE kortek[2];
kortek[0].beallit(1,2);
kortek[1].beallit(3,4);
kortek[0].almakiir();
kortek[1].almakiir();
kortek[0].kortekiir();
kortek[1].kortekiir();
return 0;
}
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Orc
senior tag
Köszi, a listán kellet farigcsálnom egy kicsit.
Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!
kékfej
csendes tag
Üdvözletem Mesterek!
itt egy abszolút kezdő..
az ügyben kérném a segítségeteket, h honnan tudnék fordítóprog-ot letölteni windows xp-re..C-ben sztnék programozni..
másik kérdésem: ha esetleg weboldalakkal sztnék foglalkozni, akk ahhoz előfeltétel h tudjak C-ben prog-zni? v elég a HTML v CSS ismeret? amit örömmel vennék ha vki elmagyarázná mit jelent..
köszönöm, annak aki reagál!
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
- ZOTAC GeForce GTX 1080 AMP Edition 8GB GDDR5X 256bit
- Filmes gép gyűjtemény
- Nikon D5000 + AF-S DX NIKKOR 18-105 mm
- Bontatlan Seagate & Western Digital HDD-k 3TB - 12TB -ig - Számla + Garancia, Ár alatt! BeszámítOK!
- DJI Mini 4 pro FMC drón - 3 akku, RC2 táv, 2 táska, Filterek, 2025. decemberig garancia, DJI Care