Kezdőoldal » Számítástechnika » Programozás » Kipróbáltam a scanf szűrési...

Kipróbáltam a scanf szűrési képességét, és az alábbi kódban kis és nagy N esetén jól működik, de kis és nagy I (vagy bármi más) esetén végtelen ciklusba kezd. Mit rontottam el?

Figyelt kérdés

#include <stdio.h>


int main (void)

{

char str[10];


while((str[0]! = 'N') && (str[0]! = 'n'))

{

printf ("Folytatás[I/N]: ");

scanf ("%[IiNn]", str) ;

}


return 0;

}


2017. márc. 18. 16:51
 1/6 anonim ***** válasza:

(str[0]! = 'N') && (str[0]! = 'n')


Egy karakter hogyan lehet egyszerre két különböző? ÉS helyett VAGY kapcsolatot használj.


Alternatív megoldás:

#include <stdio.h>

while (tolower(str[0]) != 'n')

2017. márc. 18. 18:56
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

F.szom


#include <ctype.h>

while (tolower(str[0]) != 'n')

2017. márc. 18. 18:57
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:
Valóban a VAGY kapcsolat lenne a jó megoldás, de bármit nyomok végtelen ciklust kezd. Az ÉS kapcsolat nem szabadna, hogy működjön, mégis - a kis és nagy n-re egyaránt működik. Minden másra végtelen ciklus megint. A tolower-es megoldás kis és nagy n esetén jól működik, bármi másra végtelen ciklus. Egyenlőre nem tudom mi a gond, de köszi a segítséget!
2017. márc. 21. 01:29
 4/6 SimkoL ***** válasza:

Ürítsd ki a billentyűzet puffert:

....

scanf ("%[IiNn]", str);

fflush(stdin);

....

2017. márc. 21. 09:43
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:
A logikai ÉS/VAGY-al kapcsolatban valahogy sikerült kikeveredni az erdőből. Az fflush(stdin) sajnos nem vált be. Kis és nagy I esetén maradt a végtelen ciklus. A scanf értékét vizsgáltam, először még beolvassa és 1-et ad, de utánna, folytatva a végtelen ciklusban csak 0-ákat. Nem világos, hogy miért nem áll meg újra bekérni az inputot. A probléma csak a scanf szűrési lehetőségét használva fordul elő.
2017. márc. 24. 19:53
 6/6 anonim ***** válasza:

SimkoL:

fflush(stdin) működése nem definiált, nem ajánlott/helyes a használata.

Mivel hogy az fflush egy fájlt töröl, igaz, hogy annak beadhatunk egy stdin-t, de abban nem lesz EOF. Így nem éppen azt fogja csinálni, amit elvárnál.

Mivel scanf után entert nyom az ember, a legegyszerűbb egy getchar()-t tenni a scanf után, az üríti megfelelően.

2017. máj. 29. 17:44
Hasznos számodra ez a válasz?

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!