Szoveg ignoralasa, ha int-et akarok bekerni C-ben?
scanf() visszatérési értéke a bekért változók száma
szóval valami ilyesmi
while(!scanf("%d", &var) ) {}
printf("%d\n", var);
#1 Nem egészen. A scanf-el annyit olvas be a program a bufferből, amennyit rá tud illeszteni a patternre, a többit otthagyja. Magyarul az a rész, amit nem tudott ráilleszteni, az ott marad a bufferben, és a következő iterációban ugyanazt próbálja újra beolvasni, és újra, és újra, egy végtelen ciklust létrehozva.
Ha nem sikerül számot beolvasni, akkor ki kell üríteni az input buffert, vagy a végére lépni.
1. fseek()-el az input buffer végére lépsz, így a bentmaradt szöveg nem fog bezavarni a következő olvasásnál:
fseek(stdin,0,SEEK_END);
2. Alternatívaként karakterenként végigléphetsz az input bufferen, amíg a végére nem érsz:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF){}
Utóbbi tekinthető megbízhatóbbnak, még ha kicsit clumsy is a szisztéma, hogy egyesével végiglépkedünk az inputon.
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!