我想在C中創建一個計算器。我的積極,我的參數(字符*字符串)在我的eval函數是正確的,但我不明白爲什麼或如何正確使用它。我的eval函數將以postfix表示法的形式輸入數學表達式。所以這裏是我的代碼到目前爲止,基本上我試圖接受一個字符串,將所有數字推入一個字符串堆棧,然後如果找到一個運算符,從字符串堆棧彈出兩個「字符串」,將這些字符串轉換爲整數這是我不確定如何做的另一件事),做計算,將結果推送到int stack。在搜索完所有輸入後,循環遍歷整個堆棧並添加所有的整數。這裏是我的代碼:(忽略包括)/ *如何在C中使用char *的字符進行循環?
int eval(char* String); //implicit declarations
int bourneLongPush(int);
char* bournePop(void);
int bournePush(char *string);
int bourneLongPop(void);
int bourneGetLongStackSize(void);
int eval(char* String)
{
int result = 0;
int index = 0;
int arg1;
int arg2;
char* endptr;
while(String[index] != '\0'){ //while our String pointer is not equal to null,
if(strtoimax(String, &endptr, 10) == NULL){ //if the character isn't a number,
switch(String[index]){ //switch on the operator
case "+":
arg2 = bournePop();
arg1 = bournePop();//*** how do I change char*'s to ints?
bourneLongPush(arg2+arg1);
break;
case "-":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2-arg1);
break;
case "/":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2/arg1);
break;
case "*":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2*arg1);
break;
case ">":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2>>arg1);
break;
case "<":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2<<arg1);
break;
case "^":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(pow(arg2, arg1));
break;
case "|":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2|arg1);
break;
case "&":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2&arg1);
break;
case "%":
arg2 = bournePop();
arg1 = bournePop();
bourneLongPush(arg2%arg1);
break;
default:
break;
}
else{ //a number was found
int check = bournePush(String[index]);//push the number into string stack
if(check == 1)
{
//error in push due to size
}
}
index++;
}
}
//Our input was read in as null so no more input needs to be read
for(int j = 0; j<(int)bourneGetLongStackSize; j++)
{
int num = bourneLongPop();
result += num;
}
return result;
}
你不能移動'arg2 = bournePop(); arg1 = bournePop();'在'switch'語句之前? –