Kezdőoldal » Számítástechnika » Programozás » Miért kell a scanf ("%*s")?

Miért kell a scanf ("%*s")?

Figyelt kérdés

int i;

printf("Adj meg egy egesz szamot! ");

while(scanf("%d",&i)!=1){

fprintf(stderr,"Nem szam.\n");

scanf("%*s");

printf("Adj meg egy egesz szamot! ");

}


Ez a kis programocska annyit csinál, hogy nem hagy békén, amíg nem adsz meg neki rendesen egy egész számot. A scanf("%*s") bekér egy értéket, de nem menti el azt. Ha ez nincs benne a programban, akkor végtelen ciklus lesz. Viszont én nem értem miért. Ha csak beírok egy értéket, és nem őrzi meg, akkor mi haszna van, és miért nem működik a program nélküle?



2016. nov. 28. 20:49
 1/7 anonim ***** válasza:

Ha nem sikerül a beolvasás %d-ba, akkor ott marad a bemeneten az input és újra és újra azt próbálja majd sikertelenül számként beolvasni.

Az input maradt szemetet dobja el az a scanf, hogy tiszta lappal indulhasson a következő bekérés.

2016. nov. 28. 21:05
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Köszönöm a gyors választ!


Tehát ha mondjuk beírom, hogy b akkor az i változóban lesz egy b betű, de a scanf(%*s) kitörli onnan. Ha elhagyom, akkor viszont ott marad a b az i változóban míg világ a világ, és szegény ciklus sziszifuszi munkára van ítélve?

2016. nov. 28. 21:19
 3/7 anonim ***** válasza:
Nem. Nem az i változóban. Az inputon. Ahonnan beolvasol, ahova bepötyögöd a b betűdet. Mivel a 'b' nem fittel bele egy int változóba, ezért ott marad az inputon, és amikor újra lefut a scanf, ugyanazt próbálja megint ráilleszteni a megadott formátumra, persze akkor sem sikerül, és így a végtelenségig ott marad az inputon az a "b" betű. A scanf("%s*") mindent lepucol az inputról, így az üres lesz, és ténylegesen azt fogja majd következőnek olvasni, amit utána beírsz.
2016. nov. 28. 22:28
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:
Értsd jól: Beírsz valamit az inputra. A scanf-ben megadsz egy illesztési mintát. A scanf mikor elfut, megpróbálja az inputról a mintára illeszkedő formátumban beolvasni. Ha ez sikerül, akkor amit ráillesztett a mintára, és csak azt, leveszi az inputról. Ha semmit nem sikerül beolvasnia, akkor minden ott marad az inputon.. A "%*s" minta viszont a teljes inputban levő szövegre rá fog illeni, így mindent beolvas róla.
2016. nov. 28. 22:30
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

ÓÓ értem már! Köszönöm!


Akkor így néz ki a dolog: Billentyűzet --> input --> "i" változó . Az én szerencsétlen b betűm meg ottragad az inputon, és minden egyes ciklus újrafutásnál a program megpróbálja beletuszkolni az i változóba sikertelenül.


Az input ebben az esetben egy változószerű valami a memóriában, ahol ideiglenesen eltárolódik az adat?

2016. nov. 28. 22:34
 6/7 anonim ***** válasza:
Hasonló, a stdin-ben, ami a standard input stream.
2016. nov. 28. 22:49
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Akkor tiszta, és világos, köszönöm szépen!
2016. nov. 28. 22:58

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!