Dlaczego, gdy druga z podanych liczb jest większa od -1 i mniejsza od 1, czyli np: 0.5, 0.8 itp. to wynik, nawe gdy jest całkowity, wyświetla się jako float np. 18.4/0.2=92.0 a nie 92
#include <stdio.h>
#include <ctype.h>
void oblicz(char a);
int menu(void);
int pobierz_pierwszy(void);
float liczba(void);
int main(void)
{
char dzialanie;
int znak;
printf("Cwiczenie 8.8 w jezyku C - autor: xpeye\n\n");
while ((znak=menu())!='k')
{
switch(znak)
{
case 'a' : dzialanie='+'; oblicz(dzialanie); break;
case 'b' : dzialanie='-'; oblicz(dzialanie); break;
case 'c' : dzialanie='*'; oblicz(dzialanie); break;
case 'd' : dzialanie='/'; oblicz(dzialanie); break;
}
}
printf("Koniec.\n");
getchar();
getchar();
return 0;
}
void oblicz(char a)
{
float b, c;
printf("Podaj pierwsza liczbe: ");
b=liczba();
printf("Podaj druga liczbe: ");
c=liczba();
while (a=='/' && c==0)
{
printf("Podaj liczbe inna niz 0: ");
c=liczba();
}
if (a=='+')
{
if(b==(int)b && c==(int)c && b+c==(int)(b+c))
printf("%d + %d = %d\n", (int)b, (int)c, (int)(b+c));
else if(b==(int)b)
printf("%d + %.1f = %.1f\n", (int)b, c, b+c);
else if(c==(int)c)
printf("%.1f + %d = %.1f\n", b, (int)c, b+c);
else if((int)(b+c)==b+c)
printf("%.1f + %.1f = %d\n", b, c, (int)(b+c));
else
printf("%.1f + %.1f = %.1f\n", b, c, b+c);
}
else if(a=='-')
{
if(b==(int)b && c==(int)c && b-c==(int)(b-c))
printf("%d - %d = %d\n", (int)b, (int)c, (int)(b-c));
else if(b==(int)b)
printf("%d - %.1f = %.1f\n", (int)b, c, b-c);
else if(c==(int)c)
printf("%.1f - %d = %.1f\n", b, (int)c, b-c);
else if((int)(b-c)==b-c)
printf("%.1f - %.1f = %d\n", b, c, (int)(b-c));
else
printf("%.1f - %.1f = %.1f\n", b, c, b-c);
}
else if(a=='*')
{
if(b==(int)b && c==(int)c && b*c==(int)(b*c))
printf("%d * %d = %d\n", (int)b, (int)c, (int)(b*c));
else if(b==(int)b && b*c==(int)(b*c))
printf("%d * %.1f = %d\n", (int)b, c, (int)(b*c));
else if(b==(int)b)
printf("%d * %.1f = %.1f\n", (int)b, c, b*c);
else if(c==(int)c && b*c==(int)(b*c))
printf("%.1f * %d = %d\n", b, (int)c, (int)(b*c));
else if(c==(int)c)
printf("%.1f * %d = %.1f\n", b, (int)c, b*c);
else if((int)(b*c)==b*c)
printf("%.1f * %.1f = %d\n", b, c, (int)(b*c));
else
printf("%.1f * %.1f = %.1f\n", b, c, b*c);
}
else if(a=='/')
{
if(b==(int)b && c==(int)c && b/c==(int)(b/c))
printf("%d / %d = %d\n", (int)b, (int)c, (int)(b/c));
else if(b==(int)b && b/c==(int)(b/c))
printf("%d / %.1f = %d\n", (int)b, c, (int)(b/c));
else if(b==(int)b)
printf("%d / %.1f = %.1f\n", (int)b, c, b/c);
else if(c==(int)c && b/c==(int)(b/c))
printf("%.1f / %d = %d\n", b, (int)c, (int)(b/c));
else if(c==(int)c)
printf("%.1f / %d = %.1f\n", b, (int)c, b/c);
else if((int)(b/c)==b/c)
printf("%.1f / %.1f = %d\n", b, c, (int)(b/c));
else
printf("%.1f / %.1f = %.1f\n", b, c, b/c);
}
}
int menu(void)
{
int ch;
printf("Wybierz jedno z dzialan:\n");
printf("a. dodawanie b. odejmowanie\n");
printf("c. mnozenie d. dzielenie\n");
printf("k. koniec\n");
ch=pobierz_pierwszy();
ch=tolower(ch);
while ((ch<'a' && ch>'d') && ch!='k')
{
printf("Wpisz a, b, c, d lub k");
ch=pobierz_pierwszy();
ch=tolower(ch);
}
return ch;
}
int pobierz_pierwszy(void)
{
int ch;
do
{
ch=getchar();
}
while (ch<=' ');
while (getchar()!='\n')
continue;
return ch;
}
float liczba(void)
{
float a;
char ch;
while (scanf("%f", &a)!=1)
{
while ((ch=getchar())!='\n')
putchar(ch);
printf(" nie jest liczba.\nPodaj liczbe np. 2.5, -178E8 czy 3: ");
}
return a;
}
?