- Xiaomi Mi 11 Ultra - Circus Maximus
- Vivo X200 Pro - a kétszázát!
- Samsung Galaxy A53 5G - kevesebbet többért
- Rendkívüli terméktámogatást ígér a Nothing
- Mobil flották
- VoLTE/VoWiFi
- Apple iPhone 16 Pro - rutinvizsga
- Ford SYNC 3 infotainment rendszer teszt
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Szívós, szép és kitartó az új OnePlus óra
Ú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
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Pokoli repetát hoz az új GeForce driver
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Xiaomi Mi 11 Ultra - Circus Maximus
- One otthoni szolgáltatások (TV, internet, telefon)
- Az áremelések és a GTA VI késése miatt nem költekeznek a játékosok?
- Hitelkártyák használata, hitelkártya visszatérítés
- Milyen notebookot vegyek?
- sziku69: Fűzzük össze a szavakat :)
- Vivo X200 Pro - a kétszázát!
- Nintendo Switch 2
- További aktív témák...
- Intel Core Ultra 7 265 /// Bontatlan, Teljesen Új // Üzletből, Számlával és Garanciával
- Csere-Beszámítás! Ryzen 9 9950X Processzor!
- Újszerű Gamer Asztali PC Számítógép 2026-ig Garis ASUS H510M-K R2.0 i5 11400F RTX 4060 8GB Dobozába
- Samsung Galaxy Tab A8 (2021) , 3/32 GB,
- Samsung Galaxy S6 Lite (2022) , 4/64 GB ,Wi-fi
- PS5 konzolod megvásároljuk: Budapest, Kecskemét, Szeged, Debrecen vagy akár GLS futárt küldünk!
- Csere-Beszámítás! MSI Gaming X RTX 4060Ti 16GB GDRR6 Videokártya!
- DELL PowerEdge R640 rack szerver - 1xGold 6138 (20c/40t, 2.0/3.7GHz), 64GB RAM,4x1G RJ, HBA330, áfás
- BESZÁMÍTÁS! 4TB Toshiba P300 SATA HDD meghajtó garanciával hibátlan működéssel
- Bomba ár! Dell Latitude E7240 - i7-4GEN I 16GB I 256SSD I 12,5" HD I HDMI I Cam I W10 I Garancia!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged