Program nie działa jak powinien.

0

Siemasz, jestem początkującym programistą. Napisałem kod, jest to prosty kalkulator. Godzinę siedzę i rozkminiam gdzie popełniłem błąd, niestety wymiękłem. Potrzebuje pomocy. Niech mi ktoś wskaże gdzie jest ten błąd, dlaczego program nie funkcjonuje jak powinien.

Kod źródłowy programu: http://pastebin.com/brTqqNER

0

Co to znaczy nie funkcjonuje jak powinien?

1
while((b < 0) && (b = 0));
  • ten warunek nie może zostać spełniony, b nie może być jednocześnie mniejsze od zera i równe 0. To samo tyczy się zmiennej a w pętli wyżej.
    Chyba chodziło o
while(b <= 0) // b jest mniejsze bądź równe 0 

I jeszcze jakieś

 else {      } 

po co to?

1
  scanf("%f", &a);
                if(a < 0) {
                        printf("Liczba musi byc wieksza lub rowna zero!\n");
                }else if(a = 0) {
                         printf("Liczba nie moze byc rowna 0!\n");

Hę?

0

To co poprawić, żeby program działał i poprawnie reagował na zadane mu instrukcje ?

0

W załączniku efekty jakie ukazuje kompilacja i uruchomienie, a które powinny być inne.

1

Wszystko.
Po pierwsze pedegie dał Ci już pierwszą dobrą wskazówkę. Robisz pętle która nie może się wykonać. Stosując:

 while((b < 0) && (b = 0));

oczekujesz że pętla się wykona jak B będzie mniejsze od 0 a jednocześnie będzie 0. Ciekawe co to za liczba :o?
Po 2. W C z tego co wiem do porównania wykorzystuje się nie "=" a "==". Czyli:

 while (b==0) 

Po 3.

  scanf("%f", &a);
                if(a < 0) {
                        printf("Liczba musi byc wieksza lub rowna zero!\n");
                }else if(a = 0) {
                         printf("Liczba nie moze byc rowna 0!\n");

Jaki to ma sens ? Jak użytkownik poda np "-1" to wyrzucasz komunikat że ma być większa od 0 albo równa 0. No to użytkownik wpisuje 0 i widzi komunikat że nie moze być zerem. Bezsensu.
Poza tym tu również ma być:

 else if(a == 0)

Te puste else to już kompletnie nie wiem po co.

0

while((b < 0) && (b = 0));

  • ten warunek nie może zostać spełniony, b nie może być jednocześnie mniejsze od zera i równe 0.

Gorzej, po wejściu tutaj nie jest wykonywane porównanie z zerem, a przypisywana wartość 0 (o ile pierwszy warunek przejdzie) .

Odpowiednik kodu:

 if (b < 0) { b = 0; }

else if(a = 0) {
tak samo

while((a < 0) && (a = 0));

tak samo.

Ogólnie wszystkie = w warunkach powinieneś zamienić na == (i tak dobrze że chociaż część działa biorąc pod uwagę ten błąd).

@eL - tym razem wygrałeś (1 sekunda temu...): 2fdef1fe28.png

1

http://4programmers.net/Forum/1080388

#include <stdio.h>
 
int main()
  {
   char op;
   double a,b;
   for(;;)
     {
      printf("Podaj wyrażenie (np: 12*3, ! - koniec): ");
      if(scanf("%lf %c %lf",&a,&op,&b)==3)
        {
         if(op=='+') printf("%lf + %lf = %lf\n\n",a,b,a+b);
         else if(op=='-') printf("%lf - %lf = %lf\n\n",a,b,a-b);
         else if(op=='*') printf("%lf * %lf = %lf\n\n",a,b,a*b);
         else if(op=='/') printf("%lf / %lf = %lf\n\n",a,b,a/b);
        }
      else if(getchar()=='!') return 0;
      else 
        {
         printf("Niepoprawne wyrażenie\n\n");
         while(getchar()!='\n') {}
        }
     }
  }
0

Fajnie, wszystko działa, wiadomo. Ale nie chciałem gotowego przykładu, dopiero zacząłem naukę, nie rozkminiam jeszcze takich tricków jakie zostały tam zastosowane. Lepiej jak ktoś wytłumaczy, jak działa dana funkcja, jak to się dzieje, że dzieje się tak nie inaczej. Ale dobra, jutro napiszę kod od nowa, myślę, że to najlepsze rozwiązanie. Dzięki wszystkim aktywnym, którzy chcieli pomóc. Temat zamknięty.

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