Tompior Opublikowano 26 Listopada 2008 Zgłoś Opublikowano 26 Listopada 2008 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; } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
grzybiarz Opublikowano 27 Listopada 2008 Zgłoś Opublikowano 27 Listopada 2008 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();} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...