Dlaczego dla typu zmiennej double te instrukcje nie zadziałają ?

0
#include <stdio.h>      /* printf */
#include <math.h>       /* sqrt */

int main ()
{
  double a,b,c,x0,x1,x2,delta,pierwiastek;
  printf("Podaj liczbe a: ");
  scanf("%f",&a);
  printf("Podaj liczbe b: ");
  scanf("%f",&b);
  printf("Podaj liczbe c: ");
  scanf("%f",&c);

  if(a == 0)
  {
      if(b == 0)
      {
            if(c == 0)
            {
                printf("To rownanie ma nieskonczenie wiele rozwiazan");
            }
            else
            {
                printf("Popraw dane");
            }
      }
      else
      {
          x0 = -(c)/(b);
          printf("Rownanie ma jedno miejsce zerowe: %f",x0);
      }
  }


  return 0;
}
 

Dlaczego w przypadku zmiennych float i int program dobrze zadziała jeśli wpisze kolejne do a,b,c 0,0,0
i wyświetli, że równanie ma nieskończenie wiele rozwiązań, a w przypadku zmiennej double już tego komunikatu nie wyświetli ? Dzięki.

0

użyj if(!a)

0

w języku C jako jaki typ zmiennych najlepiej deklarować ? Bo nie rozumiem tego w C, czasami przez to program może nie działać.

0

Typ wybieraj odpowiedni do potrzeb.

0

do tego programu powyższego to jaki najlepiej dobrać ? Bo właśnie nie rozumiem czemu gdybym wziął zmienna double to program nie działa poprawnie.

0

Niepoprawnie napisany program ma prawo nie działać poprawnie. Do tego problemu pasuje double.

1

Używasz złego formatu w scanf. Dla double powinno być "%lf".

2

To nie są żadne dziwactwa kompilatora oraz inny if nie pomoże. Format w scanf masz zły (napisałem to już jakiś czas temu w komentarzu wyżej). Dla double powinno być %lf a nie %f.

Zobacz:

int main() {
  double d;
  float f;
 
  std::scanf("%f %f", &d, &f);
 
  std::printf("zle formaty\n");
 
  if (d == 0.0) {
    std::printf("d == 0.0\n");
  }
  if (f == 0.0f) {
    std::printf("f == 0.0f\n");
  }
 
  std::scanf("%lf %f", &d, &f);
 
  std::printf("dobre formaty\n");
 
  if (d == 0.0) {
    std::printf("d == 0.0\n");
  }
  if (f == 0.0f) {
    std::printf("f == 0.0f\n");
  }
 
}

Wpisalem:

0 0
0 0

Wynik:

zle formaty
f == 0.0f
dobre formaty
d == 0.0
f == 0.0f

http://ideone.com/RVK3ZR

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