Ciklusban scanf, line feedet érzékel?
Sziasztok!
Az alábbi kódrészlet minden második lefutásnál 10-et ír ki(line feed - új sor)
Miért?
while(1)
{
char c;
scanf("%c",&c);
printf("%d\n",c);
}
> Ciklusban scanf, line feedet érzékel?
> Az alábbi kódrészlet minden második lefutásnál 10-et ír ki(line feed - új sor)
Szerintem megválaszoltad.
> Miért?
Mert az is értelmezhető karakterként.
És hogy oldható meg, hogy máshogy működjön? (minden lefutásnál kérjen be karaktert, és csak azt írja ki.)
Mert jelenleg beírok, egy A betűt, majd entert nyomok, és kiírja az A kódját, és utána megint lefut a ciklus és a line feed kódját, majd vár egy karaktert.
"fflush(stdin)"
Ez annyira szabványos, hogy sírok.. (ilyet ne írj)
Windowson 2 karakter a newline, 13 és 10, ezért van.
Na meg azért, ahogy a %c viselkedik, megjegyzem ez szándékosan van így, hogy bármilyen bájtot be tudj olvasni, akár line feedet is.
Megoldás többféle létezhet, vagy sorokat olvasol, tehát automatikusan eldobod a sorvége karaktert (persze portable módon, másképp nem nagyon van értelme), vagy " %c" (szóköz előtte), vagy írsz egy ciklust, ami addig olvas, míg megjeleníthető karaktert nem talál. (illetve ezek variációja)
***ROSSZ***
fflush(stdin);
scanf("..valami..");
***/ROSSZ***
Egyrész azért mert nem szabványos (nem véltelenül), és pont.
DE: ha még működik is mondjuk Windowson, amikor ilyet írsz, akkor azt várod, hogy a két sor között semmi se fog történni. Na, de mi erre a garancia. Semmi.
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!