#include <stdio.h>
#include <math.h>
float f; /* stopnie fahrenheita */
float c; /* stopnie celsjusza */
int wybor;
int main()
{
printf("\n\nWybierz rodzaj konwersji: \n\n");
printf("1. Stopnie Celsjusza na Fahrenheita. \n\n");
printf("2. Stopnie Fahrenheita na Celsjusza. \n\n");
scanf("%d", &wybor);
switch (wybor) {
case 1: printf("Podaj temperature w stopniach Celsjusza: \n\n");
scanf("%f", &c);
while(scanf("%f", &c) != 1) {
printf("Nie wprowadziles cyfr ani liczb! \n");
while
((c = getchar()) != '\n' && c != EOF);
}
printf("Podana temperatura to %f stopni Fahrenheita. \n", (((9.0/5.0) * c) + 32.0));
break;
case 2: printf("Podaj temperature w stopniach Fahrenheita: \n\n");
scanf("%f", &f);
while(scanf("%f", &c) != 1) {
printf("Nie wprowadziles cyfr ani liczb! \n");
while
((c = getchar()) != '\n' && c != EOF);
}
printf("\n\nPodana temperatura to %f stopni Celsjusza. \n\n", ((5.0 / 9.0) * (f - 32)));
break;
}
return(0);
}
Mam taki program, zastosowałem w nim to zabezpieczenie przed wpisywaniem liter
while(scanf("%f", &c) != 1) {
printf("Nie wprowadziles cyfr ani liczb! \n");
while
((c = getchar()) != '\n' && c != EOF);
}
i jest coś takiego, że odczyt wpisanej temperatury dopiero reaguje za drugim razem. Jest komunikat podaj temperaturę i za pierwszym razem po wpisaniu np 100 nic się nie dzieje, dopiero za drugim razem program to liczy. Co jest źle?
EDIT:
Przed tym kodem zabezpieczającym przed wpisaniem liter zastosowałem zamiast zwykłego scanfa:
fgets(line, sizeof(line), stdin);
sscanf(line, "%...", &zmienna);
i już jest tak jak ma być.