Wykorzystując parametry wywołania programu napisać prosty kalkulator
dwuargumentowy. Program powinien przyjmować 3 parametry: liczbę, liczbę i operację,
która ma między nimi być wykonana, np.:
calc 2 4 +
gdzie calc jest nazwa programu a 2 4 + są argumentami jego wywołania
Mój program :
# include
# include
int dodaj (int a, int b);
int odejmij (int a, int b);
int mnoz (int a, int b);
int dziel (int a, int b);
int main (int argc, char ** argv)
{
int a, b;
a = atoi (argv [1]);
b = atoi (argv [2]);
if (argv[3] == '+') printf("%d", dodaj(a,b)); // tu zaczynają się błędy--> comparison between pointer and integer (enabled by default)
else if (argv [3] == '-') printf("%d", odejmij(a,b));
else if (argv [3] == '*') printf("%d", mnoz(a,b));
else if (argv [3] == '/') printf("%f", dziel(a,b));
else printf("Bledny znak");
return 0;
}
// tu zaczynają się błędy–> comparison between pointer and integer (enabled by default)
Dziękuje za podpowiedzi, ale bardziej chodzi mi o ten błąd. Tzn. kompilator ma problem ze np. ‘+’ to nie int. Nie wiem jak powinno być poprawnie, narazie chciałabym rozwikłać ten problem. Switchem też nie wychodzi.
Wtedy ten problem musiałby wyglądać jakoś tak
switch (argv[3])
{
case '+':
printf("...",..))... itd.
}
Tyle, że ‘+’ to właśnie int o wartości 43 (kod znaku + w tablicy ASCII, dopiero w C++ literały pojedynczych znaków są typu char, który od inta różni się tylko rozmiarem, numery znaków te same).
Natomiast elementy tablicy argv są typu char*, czyli wskaźnik na znak, który de facto jest liczbą określającą numer komórki pamięci, w której zaczyna się napis.
Porównanie tych dwóch liczb nie da jednak żadnego sensownego rezultatu. Bardziej sensowne będzie porównanie ‘+’ z pierwszym znakiem tego napisu, czyli argv[3][0] lub - jak podawali powyżej - *argv[3] co wychodzi na to samo.
Jeśli chcesz to możesz też sprawdzić czy argv[3][1] == 0 aby mieć pewność, że napis ma tylko 1 znak długości (0 to terminator), ale tylko wtedy, gdy pierwszy znak jest różny od 0 (gdy jest równy to napis ma 0 znaków).
Dalej coś jest nie tak. Tzn. program poprawnie odczytuje wartości a i b, ale chyba nie odczytuje znaków ‘+’ ‘-’ itd.
# include
# include
int dodaj (int a, int b);
int odejmij (int a, int b);
int mnoz (int a, int b);
float dziel (int a, int b);
int main (int argc, char * argv[])
{
int a, b;
a = atoi (argv [1]);
b = atoi (argv [2]);
printf("a = %d, b = %d\n", a, b);
switch (argv[3][0])
{
case '+':
printf ("%d", dodaj(a,b));
case '-':
printf("%d", odejmij(a,b));
case '*':
printf("%d", mnoz(a,b));
case '/':
printf("%f", dziel (a,b));
default:
printf("Bledny znak");
}
return 0;
}
/ ********************************************************************************************************** /
int dodaj (int a, int b)
{
return (a + b) ;
}
int odejmij (int a, int b)
{
return (a - b);
}
int mnoz (int a, int b)
{
return (a * b);
}
float dziel (int a, int b)
{
return (a / b);
}