Kezdőoldal » Számítástechnika » Programozás » Ciklusban scanf, line feedet...

Ciklusban scanf, line feedet érzékel?

Figyelt kérdés

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);

}


2014. nov. 8. 12:30
1 2
 1/13 anonim ***** válasza:

> 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.

2014. nov. 8. 13:18
Hasznos számodra ez a válasz?
 2/13 A kérdező kommentje:

É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.

2014. nov. 8. 13:23
 3/13 anonim ***** válasza:
Tipp: mi történne, ha a scanf-ben nem csak 1-1 karaktert olvastatnál be ("%c"), hanem karaktert és newline-t ("%c\n") ?
2014. nov. 8. 13:26
Hasznos számodra ez a válasz?
 4/13 A kérdező kommentje:
Nem jó, de miért minden másodiknál van ez? Bekért tőlem egy karaktert, és a következő ciklusban automatikusan egy newline-t rak a változóba.
2014. nov. 8. 13:35
 5/13 SimkoL ***** válasza:
Üríteni kell a billentyűzet puffert beolvasás előtt: fflush(stdin); gyere rá miért :)
2014. nov. 8. 14:25
Hasznos számodra ez a válasz?
 6/13 anonim ***** válasza:

"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)

2014. nov. 8. 15:44
Hasznos számodra ez a válasz?
 7/13 A kérdező kommentje:
Miért nem érdemes flusholni?
2014. nov. 8. 16:42
 8/13 anonim ***** válasza:

***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.

2014. nov. 8. 18:24
Hasznos számodra ez a válasz?
 9/13 A kérdező kommentje:
És van erre beépített function? Menüt szeretnék csinálni, és switchekel lebontani a c karakter értékeinek eseteit, ami menne is, ha nem rakná bele a bufferba a sortörést is, és a következő alkalomnál nem olvasná be azt is.
2014. nov. 8. 19:12
 10/13 anonim ***** válasza:

Tipp: getchar() ?


[link]

2014. nov. 9. 11:14
Hasznos számodra ez a válasz?
1 2

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!