2012-12-13 58 views
-2

當用戶想要輸入時,有什麼方法可以從用戶和用戶選擇中的任何算術運算符中輸入數字。我基本上試圖製作一種計算器,用戶首先輸入數字,最後輸入運算符以便適用。但是沒有任何修復限制,用戶將首先輸入多少個數字。它的用戶希望。我的程序本身應該猜測它是一個字符輸入還是一個整數輸入。可能嗎 ??存儲整數和算術運算符的數據類型?

+0

'用戶首先會輸入數字和去年的運營商適用於它 - 所以...你想處理後綴表達式? – Mike

+1

你如何設想將操作符與數字相關聯?對於輸入「1 2 3 + - 」,這是否意味着(1 + 2) - 3或1 +(2-3)? – unwind

回答

1

這只是一個簡單的算術類型編程問題的概述。

將輸入作爲字符並存儲在char數組緩衝區中。 然後使用strtol可以將其轉換爲long int

For more about strtol()

另外採取運營商作爲一個字符陣列,其中每個字符索引處將代表操作者。

應用switch - case並基於這些情況(這將是運營商+,-等)執行您的操作。

另一種方法是infix arithmetic notations轉換爲postfix notations,並使用stacks爲,簡單地解決。在這種情況下,將不與運算符優先級問題,因爲您已經應用了邏輯存儲運營商在堆棧,只是彈出一個由一個和執行操作。

+0

感謝隊友你解決了我的問題。感謝Omkant。 –

0

一個整數應該以0〜9或減號開始。

運算符應該是一個字符減號或0〜9個字符以外的字符。

以字符串形式獲取輸入,判斷它是運算符還是整數,然後使用atoi將字符串轉換爲整數。

如果你有能力寫一個計算器,那對你來說應該是簡單的任務。

0

我的建議是建立一個OPP(對象優先解析器)來操作用戶輸入的字符串。 將輸入作爲字符串時,用戶有權與算術運算符一起輸入整個algebric方程,因爲它們僅被視爲字符。然後你可以把它轉換成一個char數組,對它執行OPP操作。 http://code.google.com/p/expressionparser/

或者你可以做的是一個循序漸進的像數步輸入,然後然後操作員號碼:)

0

你真的不列出許多細節還是你要如何處理任何的例子,所以我無法給你更好的建議。既然你不知道的輸入(數字/字符)的順序,或量它的最好把它作爲一個字符串:

char *expression_buf = NULL; 
scanf("%m[^\n]", expression_buf); // grab any number of characters/digits with spaces 
//do some postfix stuff 
free(expression_buf); 

然後你就可以弄清楚什麼是數字的,什麼是不:

#include <ctype.h> 
isdigit(expression_buf[index]) 

這幾乎是所有你需要的工具。然後彈出數字/運算符並按順序應用它們。將它們放在堆疊上將有助於您按照正確的順序將它們彈出。

1

讓我們假設用戶只能進入follwing操作格式之一:

x + y 
x * y 
x - y 
x/y 

這裏後,你如何能做到這一點:

#include<stdio.h> 
#include<stdlib.h> 

int main() { 
    int x, y; 
    char op; 

    printf ("Enter your Expression The Format should be One of the following:\nx + y\nx - y\nx * y\nx/y\n"); 
    if (scanf("%d %c %d",&x,&op,&y)<3) { 
     printf("Wrong Expression\n"); 
     return 0; 
    } 
    switch (op) { 
     case '+': 
      printf("%d + %d = %d\n",x,y,x+y); 
      break; 
     case '-': 
      printf("%d - %d = %d\n",x,y,x-y); 
      break; 
     case '*': 
      printf("%d * %d = %d\n",x,y,x*y); 
      break; 
     case '/': 
      printf("%d/%d = %d\n",x,y,x/y); 
      break; 
     default: 
      printf("Invalid operator %c\n",op); 
    } 
    return 0; 
}