Mam przykładowo taki kod:
#include
Mam przykładowo taki kod:
#include
#include
int main()
{
int x, r;
for(;;)
{
r = scanf(" %d", &x);
if(r == 1 && x > 0)
break;
else if(r == 0)
scanf(" %*s");
else if(r == EOF)
/*koniec wejścia*/;
}
printf("%d", x);
return 0;
}
Hm, wygląda nieźle. Dzięki.
Mam jeszcze takie pytanie:
r = scanf(" %d", &x);scanf(" %*s");[/code]Ta spacja (przed znakiem procent) tam widnieje w jakimś konkretnym celu?
W celu zignorowania białych znaków na wejściu jeśli jakieś są. W większości implementacji i tak są ignorowane, ale przezorny zawsze ubezpieczony
Rolek0, czy zdajesz sobie sprawy co tym robisz?
scanf(" %*s");
wczytujesz nieokreśloną ilość znaków w nieokreślony adres pamięci.
Natomiast to:
scanf(" %d", &x);
pod jednym kompilatorem zadziała pod innym nie.
Np: scanf(".%d", &x); - pominie białe znaki, sprawdzi czy następny znak to ‘.’, pominie białe znaki, wczyta x
natomiast użycie białych znaków w formacie scanf nie jest zdefiniowane.
scanf domyślne pomija białe znaki, nie trzeba nić z tym robić.
#include
A jak będzie podano więcej niż 31 znak? Lub dwa słowa?
zamiast scanf("%31s", buffr); użyj:
while(getchar()!=’\n’) {}
Ja zdaję. A czy ty zdajesz sobie sprawę, że * oznacza, że dane zostaną odczytane ale nie zostaną nigdzie zapisane?
To będzie ignorować po kawałku