Új hozzászólás Aktív témák
-
Jester01
veterán
Az fscanf szintaxisa 2 karakter beolvasására: fscanf(bemeneti fájl neve, "%c %c", &a, &b)
Nem a fájl neve kell oda, hanem a megnyitott fájl pointer. Karakter olvasáshoz az fgetc függvényt kell használni ami szintén a fájl pointert kapja és visszaadja a soron következő karaktert. A getchar() ekvivalens egy fgetc(stdin) hívással, vagyis az a standard inputról olvas ezért nem kell neki fájl.
Példa:
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE* f = fopen(argv[1], "rb");
int ch;
while((ch = fgetc(f)) != EOF) putchar(ch);
fclose(f);
return 0;
} -
Jester01
veterán
Mégpedig azért, mert a scanf egy borzasztó rossz függvény terminálról olvasáshoz.
Ha debuggerrel vagy egy kiíratást betéve megnézed mi lesz a gyalog változód valószínűleg egyből kiszúrod, hogy bizony a bástya bekérés után a pufferben maradt egy (vagy kettő) soremelés karakter és az kerül oda.Gyors megoldásként ha a második scanf formátumstring elejére teszel egy szóközt akkor már jó lesz. (Persze ahogy cucka kollega mondta, csak simán az értékeket hasonlítsd össze.)
Beolvasáshoz amúgy fgets és sscanf párosa ajánlott, megfelelő hibakezeléssel.
-
cucka
addikt
El kéne olvasni, hogy az strcmp hogy működik:
int strcmp(const char *s1, const char *s2);
Tehát két darab char* típusú változót kér paraméternek, a te programodban pedig két char típusú változóval próbálod meghívni.
Char típusú változókat pont úgy tudod összehasonlítani, mint ahogy sima int-eket hasonlítasz, tehát alapvetően ebben a programban semmi szükség az strcmp függvényre. A char típus egy darab karaktert jelent ugyan, de felfoghatod úgy is, mint egy előjel nélküli egész számot, mert tulajdonképpen az. -
jattila40
tag
A fügvénynek csak egy visszatérő értéke lehet, és az sem akármilyen típusú. Ha felszín és térfogat is kell, akkor írhatsz egy void fv.-t (eljárást), aminek 4 paramétere lesz, valahogy így:
#include <stdio.h>
#define PI 3.141592654void felszin_terfogat(float sugar, float magassag,float *felszin, float *terfogat)
{
if(felszin==NULL || terfogat==NULL)return;
*felszin=2*sugar*PI*(sugar+magassag);
*terfogat=sugar*sugar*PI*magassag;
}void main(int argc, char*argv[])
{
float sugar,magassag,felszin,terfogat;if(argc<3){
printf( "henger felszinet es terfogatat szamolja ki a program\r\n\
parancssori argumentumokkal is hivhato: <programnev> <sugar> <magassag>\r\n");
printf("sugar: ");
scanf("%f",&sugar);
printf("magassag: ");
scanf("%f",&magassag);
}
else{
sugar=atof(argv[1]);
magassag=atof(argv[2]);
}felszin_terfogat(sugar,magassag,&felszin,&magassag);
printf("felszin: %10.5f\r\n",felszin);
printf("terfogat: %10.5f\r\n",terfogat);
} -
Lortech
addikt
Szerintem érdemes két külön függvényt írni a két számításra, ezzel elkerülve a problémát.
A return valóban egy értéket ad vissza, de ez az érték lehet akár egy memória cím is, ami egy tömbre, listára, struktúrára stb. mutat, ami bármennyi értéket takarhat.
Voiddal is megoldható - ha konkrétan ez volt a feladat -, de akkor átmenő paramétert vagy globális változót kell alkalmaznod (ezt csak a lehetőség miatt említettem, ne így csináld). Ez pl. úgy néz ki, hogy egy mutatót adsz át paraméterként, és az általa mutatott értéket megváltoztatod a kivánt értékre az eljárás végrehajtása során, majd az értéket felhasználod.pl.
"r változó mint mutató deklarálása, inicializálása";
függvényhívás(r (címe),...,...);
eredmeny = r (értéke);Kódot szándékosan nem írok, mert ebben a stádiumban szerintem jobb, ha te magad fedezed fel ezeket a fogalmakat.
-
Lortech
addikt
Kiemeled hogy void függvény, pedig a void mint típus, ill. típus "hiánya" éppen procedúrát jelent, nem függvényt, nincs visszatérési értéke, ezért a "felszin=A..."
értékadó kifejezés nyilvánvalóan hibás. A függvénynek egy megfelelő (2*PI*r*(r+h) -vel kompatibilis) adattípust kell megadnod visszatérési érték típusának void helyett.
(szerk: és persze vissza is kell térned a függvényből a visszatérési értékkel a return kulcsszóval)
Ú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!
- Sokkal jobb ajánlat lett elődjénél az iPhone 17e
- Milyen billentyűzetet vegyek?
- Milyen belső merevlemezt vegyek?
- Gitáros topic
- Bambu Lab 3D nyomtatók
- Horgász topik
- mefistofeles: Az elhízás nem akaratgyengeség!
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- gban: Ingyen kellene, de tegnapra
- Motorola Signature - mielőtt aláírnád...
- További aktív témák...
- Thinkpad T14 Gen6 14" FHD+ IPS érintő Ultra 7 265U 16GB 256GB NVMe ujjlolv IR kam gar
- Disney gyerek elefántos falióra
- Dobozos Új HP OmniBook 5 Flip 2-in-1 érintőkijelzős laptop i5-1334U 16gb ram 512ssd Garancia
- Samsung Galaxy A13 gyári átlátszó szilikon tok
- Samsung Galaxy A54 gyári átlátszó szilikon hátlap tok
- billentyűzetek - kiárusítás - Logitech, Corsair, ASUS
- Azonnali készpénzes félkonfig / félgép felvásárlás személyesen / csomagküldéssel korrekt áron
- HIBÁTLAN iPhone 14 Pro Max 128GB Deep Purple-1 ÉV GARANCIA - Kártyafüggetlen, MS4682
- Samsung Galaxy Book 3 Amoled 360 i5 13.gen, 16GB RAM, 512GB SSD, érintőkijelzős kedvező áron!
- Surface Pro 7+ i5-1135G7 16GB 1000GB 1 év garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Nemigazán értem a c nyelvben a velük történő műveleteket.Előre is köszi.
Van amikor szinte majdnem minden sor után oda kell biggyeszteni egy kiírást, mikor már télleg nem tudod, hogy mit rontottál el 
