Skocz do zawartości
Tompior

C - Kalkulator Liczb Zespolonych - Obsluga Bledu.

Rekomendowane odpowiedzi

Witam,

mam do napisania program w jezyku C - kalkulator liczb zespolonych, ktory ma: dodawac, odejmowac oraz mnozyc.

Program dziala, ale nie zawiera obslugi bledu. Jezeli wprowadze jakas literke, lub znak specjalny, to wszystko sie wykrzacza :D

W jaki sposob wprowadzic zalozenie, ze wprowadzona liczba moze skladac sie tylko z cyfr oraz kropki(do ulamkow)?

Jak narazie, myslalem cos o uzyciu w wykluczeniu, roznych przedzialow z ascii, ale co z tym zrobic i jak - nie mam pojecia :D

Czyli w skrocie: Jaka komende wpisac, zeby mozna bylo wpisac tylko cyfry/kropke, a gdy ktos wpisze literke//znak specjalny, zeby program wracal do poczatku.

Z gory dzieki za pomoc.

 

#include <stdio.h>
#include <math.h>


int main()
{
     float a1, b1, a2, b2; //z=a+bi//
     int wybor;
     do
     {
     printf("Witamy w kalkulatorze do wykonywania dzialan na liczbach zespolonych :)\nKtore dzialanie chcesz wykonac?\n1 dodawanie\n2 odejmowanie\n3 mnozenie\ninne konczy\n");
     scanf("%d",&wybor);
     switch (wybor)
     {
           case 1: /*Dodawanie*/
                  {
                        printf("Podaj Re pierwszej liczby zespolonej: ");
                        scanf("%f",&a1);
                        printf("Podaj Im pierwszej liczby zespolonej: ");
                        scanf("%f",&b1);
                        printf("Podaj Re drugiej liczby zespolonej: ");
                        scanf("%f",&a2);
                        printf("Podaj Im drugiej liczby zespolonej: ");
                        scanf("%f",&b2);
                        printf("Wartosc zmiennej z1:\t%.2f+%.2fi\n",a1,b1);
                        printf("Wartosc zmiennej z2:\t%.2f+%.2fi\n",a2,b2);
                        printf("Wartosc sumy:\t%.2f+%.2fi\n",a1+a2,b1+b2);
                        break;
                  }
           case 2: /*Odejmowanie*/
                  {
                        printf("Podaj Re pierwszej liczby zespolonej: ");
                        scanf("%f",&a1);
                        printf("Podaj Im pierwszej liczby zespolonej: ");
                        scanf("%f",&b1);
                        printf("Podaj Re drugiej liczby zespolonej: ");
                        scanf("%f",&a2);
                        printf("Podaj Im drugiej liczby zespolonej: ");
                        scanf("%f",&b2);
                        printf("Wartosc zmiennej z1:\t%.2f+%.2fi\n",a1,b1);
                        printf("Wartosc zmiennej z2:\t%.2f+%.2fi\n",a2,b2);
                        printf("Wartosc roznicy:\t%.2f+%.2fi\n",a1-a2,b1-b2);
                        break;
                  }
           case 3: /*Mnozenie*/
                  {
                     printf("Podaj Re pierwszej liczby zespolonej: ");
                        scanf("%f",&a1);
                        printf("Podaj Im pierwszej liczby zespolonej: ");
                        scanf("%f",&b1);
                        printf("Podaj Re drugiej liczby zespolonej: ");
                        scanf("%f",&a2);
                        printf("Podaj Im drugiej liczby zespolonej: ");
                        scanf("%f",&b2);
                        printf("Wartosc zmiennej z1:\t%.2f+%.2fi\n",a1,b1);
                        printf("Wartosc zmiennej z2:\t%.2f+%.2fi\n",a2,b2);
                        printf("Wartosc iloczynu:\t%.2f+%.2fi\n",a1*a2-b1*b2,b1*a2+a1*b2);
                        break;   
                  }

           default:      break;
     }
     if (wybor!=1 && wybor!=2 && wybor!=3)
           break;
     printf("Czy chcesz powtorzyc?\n0 konczy\n");
     scanf("%d",&wybor);
     }while(wybor!=0);
     system("PAUSE");
     return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

scanf zwraca ilość poprawnie wczytanych "tagów" (tego czegoś z %). W twoim przypadku jeżeli to co wprowadzi użytkownik nie będzie liczbą, scanf zwróci 0. Jeżeli to będzie liczba - zwróci 1.

 

Toteż, każden scanf zmien na cos takiego:

if (scanf(..)==0) {nakrzycz na uzytkownika();}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...