Wywala mi bład że
Kod: Zaznacz cały
returnValue = get_value(returnValue, actions[i], input[j]);
Ja nie wiem gdzie tkwi ten błąd co jest nie tak zadeklarowane-> po części ze względu na uboższą wiedzę odnośnie C niż mój kolega posiada, w sumie on sam nie wie dlaczego to nie działa tak jak powinno.
Nie wiem co to da ale poniżej umieszczam cały kod programu. I z góry bardzo dziękuje za pomoc w tym
A jeśli jest możliwość tego uproszczenia to bardzo ale to bardzo prosiłbym o sugestie -> toż to jest mały sajgon tam ?
Kod: Zaznacz cały
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
# define MAX 4
// do sprawdzania czy akcja jest ok
int is_valid_action( char action )
{
if ( action == '+' || action == '-' || action == '*' || action == '/' || action == '=' )
{
return 1;
}
return 0;
}
// tutaj liczymy całość
// jedziemy po tablicy input i wg odpowiedniego klucza tablicy actions wykonujemy dane matematyczne działanie
int do_calc( int input[], char actions[] )
{
int i, j, returnValue, firstCall = 0;
for ( i = 0; i < sizeof(input); i++)
{
// potrzebne zeby wziasc I element z tablicy input, potem returnValue przechowuje juz wykonane działania
// tzn mamy działanie 10+60*2 czyli za pierwszym razem returnValue = 10; przy i=1; returnValue = 60;
if ( firstCall == 0 )
{
returnValue = input[i];
firstCall = 1;
}
// tutaj wykonujemy działania, czyli returnValue przechowuje ostatnią wartość działania lub za I przebiegiem For, I element tablicy,
// actions[i] - jaka akcje wykonać
// input[j] - nastpna wartość w talibcy input czyli np. to nasze 60 w I przebiegu funkcji FOR ;
returnValue = get_value(returnValue, actions[i], input[j]);
j++;
}
return returnValue;
}
// tutaj dokładnie wykonujesz działania, chyba nie trzegba szczegoółowo omawiac
int get_value( int current, char action, int nextValue )
{
switch ( action )
{
case '+':
return current + nextValue;
break;
case '-':
return current - nextValue;
break;
case '*':
return current * nextValue;
break;
case '/':
return current / nextValue;
break;
default:
printf("Error: brak akcji \n");
return 0;
break;
}
}
int main(void)
{
char
actions[MAX], action;
int
input[MAX], inputIndex = 0, actionIndex, i;
printf("Welcome to SimpleCalc v 0.1.0.0 \n");
printf("Podaj pierwszą liczbę \n");
scanf("%s", &action);
while( action != '=' )
{
printf("Wybierz działanie ( '+', '-', '*', '/' ) \n");
scanf("%s", &action);
if (isxdigit(action)) // sprawdzam czy dodać wartość do liczenia
{
input[inputIndex] = atoi(action);
inputIndex++;
if (inputIndex > (actionIndex + 1) ) // ten potworek jest żeby wsio sie zgadzało miedzy np. input[] i actions[]
{
actionIndex = actionIndex + 1;
}
}
else // czy dodać wpisaną komende jako akcje
{
if (is_valid_action(action))
{
actions[actionIndex] = action;
actionIndex++;
if (actionIndex > (inputIndex + 1)) // ten potworek jest żeby wsio sie zgadzało miedzy np. input[] i actions[]
{
inputIndex = inputIndex + 1;
}
}
else
{
printf("KERNEL PANIC: \n Niedozwolona akcja! \n");
return 0;
}
}
}
// sprawdzam czy mam dane, jak nie to koniec prog.
if (sizeof(input) == 0)
{
printf("Error: \n brak danych! \n");
return 0;
}
// wywal na screen wprowadzone dane i jakie operacje pokolei zrobilismy
for ( i = 0; i < sizeof(input); i++)
{
printf("%d \n", input[i]);
printf("%s \n", actions[i]);
}
// podsumowanie + rezultat do_calc czyli końcowe wyliczenia :d
printf("------------------------ \n\t\t %d", do_calc( input, actions ) );
// the end :P nice programist story :D
return 0;
}