Problem z wczytywaniem liczb w inicjalizatorze pętli while

0

Witam,

Mam pytanie odnośnie prostego problemu. Oto kod:

int zadanie(void)
{
    float f1 = 0.0; float f2 = 0.0;
    printf("Podaj dwie liczby zmiennoprzecinkowe: ");
    while (scanf("%f %f",&f1,&f2)==2){
        printf("%f\n",(f1-f2)/(f1*f2));
    }
    return 0;
}

 
zadanie();
float f1 = 0.0; float f2 = 0.0;
printf("Podaj dwie liczby zmiennoprzecinkowe: ");
scanf("%f %f",&f1,&f2);

Problem polega na tym, że pomimo zastosowania teoretycznie prawidłowego warunku w pętli while, działanie programu w dalszej części jest nieprawidłowe.
Mianowicie dla wpisania wartości innej niż liczba - tutaj na przykład k - program owszem wychodzi z pętli, natomiast nie przyjmuje już nic później na standardowe wejście, zupełnie jakby bufor był już pełen.
Jakieś pomysły co może być nie tak?

1

To kwestia tego, że tak jak mówisz: w buforze znajduje się już coś, co natychmiast zostaje odczytane przez kolejne scanf.
Może spróbuj po prostu złapać kolejny nadmiarowy znak tuż przed scanf po wyjściu z pętli?
Mniej więcej tak:

zadanie();
float f1 = 0.0; float f2 = 0.0;

scanf("%c", &f1);    // Though f1 is a float, it can still hold the 8-bit value of a single character

printf("Podaj dwie liczby zmiennoprzecinkowe: ");
scanf("%f %f",&f1,&f2);
1
void zadanie()
{
    for(float f1=0,f2=0;printf("Podaj dwie liczby zmiennoprzecinkowe: ") && scanf("%f %f",&f1,&f2)==2;)
	{
		printf("%f\n",(f1-f2)/(f1*f2));
	}
    scanf("%*[^\n]*");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1