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?
#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;
}
(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')
F.szom
#include <ctype.h>
while (tolower(str[0]) != 'n')
Ürítsd ki a billentyűzet puffert:
....
scanf ("%[IiNn]", str);
fflush(stdin);
....
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.
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!