uzikan
(Uzikan)
17 Listopad 2007 22:47
#1
Witam, jestem bardzo początkującym “programista”… Chciałbym się dowiedzieć co w tym kodzie jest nie tak.
#include
int main() {
printf("Prosty kalkulator\n
-------------------------------------------------------------\n\n
Wpisz działanie: ");
float a,b;
char znak;
float Suma,Roznica,Iloczyn,Iloraz;
scanf("%f",&a);
scanf("%c",&znak);
scanf("%f",&b);
if(znak == '+')
{
Suma=a+b;
printf("Wynik dzialania: %f",Suma);
}
if(znak == '-')
{
Roznica=a-b;
printf("Wynik dzialania: %f",Roznica);
}
if(znak == '*')
{
Iloczyn=a*b;
printf("Wynik dzialania: %f",Iloczyn);
} else {
Iloraz=a/b;
printf("Wynik dzialania: %f",Iloraz);
}
return 0;
}
witosx
(Witos)
17 Listopad 2007 23:05
#2
#include
int main() {
printf("Prosty kalkulator\n");
printf("-------------------------------------------------------------\n\n");
printf("Wpisz działanie: ");
float a,b;
char znak;
float Suma,Roznica,Iloczyn,Iloraz;
scanf("%f",&a);
scanf("%c",&znak);
scanf("%f",&b);
if(znak == '+')
{
Suma=a+b;
printf("Wynik dzialania: %f",Suma);
}
else if(znak == '-')
{
Roznica=a-b;
printf("Wynik dzialania: %f",Roznica);
}
else if(znak == '*')
{
Iloczyn=a*b;
printf("Wynik dzialania: %f",Iloczyn);
}
else
{
Iloraz=a/b;
printf("Wynik dzialania: %f",Iloraz);
}
return 0;
}
somekind
(somekind)
17 Listopad 2007 23:18
#3
Twój program nie sprawdza wszystkich możliwości związanych ze znakami. Zapomniałeś dwa razy o “else if”. Powinno być tak:
if(znak == '+')
{
Suma=a+b;
printf("Wynik dzialania: %f",Suma);
}
else if(znak == '-')
{
Roznica=a-b;
printf("Wynik dzialania: %f",Roznica);
}
else if(znak == '*')
{
Iloczyn=a*b;
printf("Wynik dzialania: %f",Iloczyn);
}
else
{
Iloraz=a/b;
printf("Wynik dzialania: %f",Iloraz);
}
Wersja jeszcze lepsza, która pozwoli również rozwiązać problem wpisania przez użytkownika nieobsługiwanego znaku. Bo w Twojej wersji wpisanie czegokolwiek, co nie jest plusem, minusem albo gwiazdką powoduje podzielnie. Tak się nie robi Gdy mamy wiele możliwości wyboru, zamiast if…else wygodniej użyć konstrukcji switch…case…default, o tak:
switch(znak)
{
case '+':
{
Suma=a+b;
printf("Wynik dzialania: %f",Suma);
break;
}
case '-':
{
Roznica=a-b;
printf("Wynik dzialania: %f",Roznica);
break;
}
case '*':
{
Iloczyn=a*b;
printf("Wynik dzialania: %f",Iloczyn);
break;
}
case '/':
{
Iloraz=a/b;
printf("Wynik dzialania: %f",Iloraz);
break;
}
default:
{
printf("Nieznane dzialanie!");
break;
}
}
Powiedz mi jeszcze jedno: czemu masz 4 zmienne: Suma, Roznica, Iloczyn, Iloraz, skoro później 3 z nich nie wykorzystujesz? Nie lepiej mieć jedną zmienną, np. wynik i do niej podstawić działanie w zależności od znaku. Wiem, że pamięć droga nie jest, ale po co robić sobie bałagan w programie
Aha: Wygodniej jest pisać nazwy zmiennych małymi literami, natomiast funkcji wielkimi. Żeby na pierwszy rzut oka można było ocenić, co jest czym.
uzikan
(Uzikan)
17 Listopad 2007 23:35
#4
wiem wiem…miałem na początku jedną zmienna przechowywująca wynik ale troche kombinowałem i zostało tak… ale to nie ma znaczenia. Chciałem wiedzieć dlaczego nie działa…
Jeszcze jedno… bo ja myslełem że jest w C coś takiego:
if (warunek) operacja;
i jeżeli nie jest spełniony to przechodzi dalej gdzie mam kolejny if …
Złączono Posta : 18.11.2007 (Nie) 0:47
Przerobiłem na switch. Nadal nie działa…
#include
int main() {
printf("Prosty kalkulator\n
-------------------------------------------------------------\n\n
Wpisz działanie: ");
float a,b;
char znak;
float wynik;
scanf("%f",&a);
scanf("%c",&znak);
scanf("%f",&b);
switch(znak)
{
case '+':
{
wynik=a+b;
printf("Wynik dzialania: %f",wynik);
break;
}
case '-':
{
wynik=a-b;
printf("Wynik dzialania: %f",wynik);
break;
}
case '*':
{
wynik=a*b;
printf("Wynik dzialania: %f",wynik);
break;
}
case '/':
{
wynik=a/b;
printf("Wynik dzialania: %f",wynik);
break;
}
default:
{
printf("Nieznane dzialanie!");
break;
}
}
return 0;
}
witosx
(Witos)
18 Listopad 2007 11:32
#5
uzikan Tam wyzej jest moj post z dzialajacym programem z minimalnymi zmianami (tzn. poprawione tylko to przez co Ci nie działał), więc może przeanalizuj te zmiany…
uzikan
(Uzikan)
18 Listopad 2007 11:56
#6
ok. To poprawione z else if działa. Ale co jest w takim razie w wersji z wykorzystaniem Switch ??
#include
int main() {
printf("Prosty kalkulator\n
-------------------------------------------------------------\n\n
Wpisz działanie: ");
float a,b;
char znak;
float wynik;
scanf("%f",&a);
scanf("%c",&znak);
scanf("%f",&b);
switch(znak)
{
case '+':
{
wynik=a+b;
printf("Wynik dzialania: %f",wynik);
break;
}
case '-':
{
wynik=a-b;
printf("Wynik dzialania: %f",wynik);
break;
}
case '*':
{
wynik=a*b;
printf("Wynik dzialania: %f",wynik);
break;
}
case '/':
{
wynik=a/b;
printf("Wynik dzialania: %f",wynik);
break;
}
default:
{
printf("Nieznane dzialanie!");
break;
}
}
return 0;
}
witosx
(Witos)
18 Listopad 2007 12:55
#7
To jest zle, tak jak i w poprzedniej wersji, przeciez tam ci to poprawilem więc nie wiem czemu dalej robisz ten błąd…
uzikan
(Uzikan)
18 Listopad 2007 17:03
#8
Ok…już wszystko wiem. Po prostu w twojej poprawce nie zauważyłem tego. Nie wiedziałem że to jest źle. Dzieki za wszystko