2014-06-07 48 views
0

我試圖用c中的+, - ,*和/運算符來製作簡單的計算器。例如((2.1 - 5.6)*4)+(2.8+2/2.2)應該是-10.29 ...我嘗試過這樣,但它只適用於出門bar。如果用戶的輸入包含括號,我不知道如何處理。用括號括起來的c中的簡單計算器

float calc(void) 
{ 
    float x,y, parse; 
    char c; 

    int test = scanf("%f %c %f", &x,&c,&y); 
    if (test == 0){ // if '(' starts equation 
     parse = calc(); 
     } 

    else{ 
     if (c == '-'){ 
      return x - y; 
     } 
     else if (c == '/'){ 
      return x/y; 
     } 
     else if (c == '+'){ 
      return x + y; 
     } 
     else if (c == '*'){ 
      return x * y; 
     } 
    } 
} 
+0

你要打破這種分爲兩個問題:1)找到所有的支架,配對起來,找到自己最裏面的內容; 2)評估這些內容。它成爲一個遞歸代碼 - 詳細解釋這個範圍的範圍超出了StackOverflow的範圍。 – Floris

+2

你可能想看看這個:http://en.wikipedia.org/wiki/Shunting-yard_algorithm –

+0

甚至http://stackoverflow.com/questions/4582398/writing-a-simple-equation-parser – Floris

回答

2

這裏有算法: http://en.wikipedia.org/wiki/Shunting-yard_algorithm

什麼你正在使用被稱爲順便說綴表示法。該算法似乎做的是將其轉換爲後綴符號(由於您只需要一個堆棧,所以它更容易計算)。

而且,只是出於好奇,老計算器使用後綴符號(有也仍然使用它SOM的編程語言),所以,要計算3 + 5,你寫3 5 +

1

你解決不了的方程以這種簡單的方式使括號複雜化。有一些算法必須遵循。其中一個在某些計算器中使用的是逆轉波蘭表示法其中將公式轉換爲特定形式,然後使用堆棧開始推送和彈出以考慮優先級進行計算。

Link to Reverse Polish Notation

+0

@ amir-尼斯和實際的解釋here.An upvote from myside。 –

+0

@shekharsuman謝謝 – CMPS

相關問題