Miért ugorja át a második bekérést az a drága kis program (hogy mindjárt vízbe fojtom)?
Az alábbi kódról van szó, hogy milyen feladatot lát el azzal nem untatnám a kedves válaszolót (röviden megválaszolva amúgyis semmilyet), de azért bemásoltam a teljes alkotást, ha esetleg valakit érdekel, a scanf utáni részek direkt vanak megjegyzésnek jelölve, mert a probléma szempontjából lényegtelenek. A problémám az, hogy a második adatbekérést ("Milyen szinu almat szeretnel enni?")egyszerűen átugorja futáskor, és nem birok rájönni miért. A kód C nyelven van és gcc-vel fordítom. Dob egy warningot is fordítás után, hogy az enum nem int típusú de ez hülyeség, mert az enum számot rendel a szavakhoz.
***********************
#include<stdio.h>
int main(){
enum het{Hetfo, Kedd, Szerda, Csutortok, Pentek, Szombat, Vasarnap} nap;
enum colors{piros, zold, sarga} col;
printf("Milyen napon szeretnél almát enni?\n"); scanf("%d",&nap);
printf("Milyen szinu almat szeretnel enni?\n"); scanf("%d",&col);
/*switch(nap)
{
case Hetfo:
case Kedd:
case Szerda:
case Csutortok:
case Pentek:
printf("Csak hetvegen tudok almat felszolgalni!\n");
break;
case Szombat:
case Vasarnap:
printf("Mivel hetvege is van, alma is van!\n");
switch(col)
{
case piros:
printf("A piros alma egeszseges, jo valasztas!\n");
break;
case zold:
printf("Vigyazz, a zold alma savanyu\n");
break;
case sarga:
printf("A sarga is cseszett finom!\n");
break;
default:
printf("Nem ism erek ilyen szinu almat.\n");
}
break;
default:
printf("A het csak 7 napbol all!\n");
break;
}*/
return 0;
}
Köszi a segítséget! Kis is próbáltad(?), mert nekem a világért se csinálja normálisan.
Persze az jó hogy figyelmeztet, de ebben az esetben tárgytalan.
A scanf mindig skippeli a vezető whitespaceket, ez alól csupán a %c a kivétel ami mindig a következő karaktert olvassa be, mindegy mi az (ebbe a hibába szoktak beleesni a kezdők). Ez nem fordító specifikus, ez a szabvány. A %d is kihagyja a whitespaceket, ezért nyugodtan beadhatod neki hogy " \n \t\t 123\n", be fogja olvasni az 123-t, és a pufferben marad egy "\n" a végéről.
Ami hiba és nem értem miért fordul egyáltalán le a program, az a típuskonverzió.
C-ben az "enum -> int" működik implicit (C++-ban már nem), de az "int -> enum" nem! Míg minden enum egy szám is egyben, nem minden szám enum, ezért a C szabvány nem engedi meg az "int -> enum" implicit típuskonverziót. Vélhetőleg ez zavarhatja meg a fordítót.
Másik tippem az lenne hogy rossz számot adsz be (0-2 kéne), ezért működik másoknak.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!