電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
neilshih的C語言版後置式(postfix)計算機

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2007-6-4, PM 5:42 星期一    文章主題: neilshih的C語言版後置式(postfix)計算機 引言回覆

neilshih 寫到:

這是我在學校自己寫的後置式計算機
代碼:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int getnextword(char s[], int idx, char w[]);
int push(int x);
int pop(void);
int stack[100];
int sp = 0;
int main(void){
    char word[64];
    char str[128];
    char op;
    int i;
    int a, b, c;
    while(strcmp(gets(str), "quit")){
        for(i = 0; (i = getnextword(str, i, word)) >= 0;){
            if(isdigit(word[0]))
                push(atof(word));
            else{
                op = word[0];
                b = pop();
                a = pop();
                switch(op){
                    case '+':
                        c = a + b;
                        break; 
                     case '-':
                        c = a - b;
                        break;               
                    case '*':
                        c = a * b;
                        break;
                    case '/':
                        if(b == 0)
                            printf("\n\aDivision by zero error!\n");
                        else
                            c = a / b;
                        break;     
                    default:
                        printf("\n\aIllegal operation!\n");   
                        break;
                }
                push(c);
            }
        }
        printf("%d\n", pop());
    }
}

int getnextword(char s[], int idx, char w[]){
    int i = 0;
    while(s[idx] == ' ')
        ++idx;
    while(s[idx] != ' ' && s[idx] != '\0' && s[idx] != '\n')
        w[i++] = s[idx++];
    w[i] = '\0';
    return i == 0 ? -1 : idx;
}

int push(int x){
    if(sp < 100)
        return stack[sp++] = x;
    else{
        printf("error:stack full can't push %g\n", x);
        return 0;
    }
}

int pop(void){
    if(sp > 0)
        return stack[--sp];
    else{
        printf("error:stack empty\n");
        return 0;
    }
}
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
話術師
對這略感興趣的新人


註冊時間: 2007-06-02
文章: 17
來自: 耗電量很高的地方
0.00 果凍幣

發表發表於: 2007-6-6, AM 2:44 星期三    文章主題: Re:neilshih的C語言版後置式(postfix)計算機 引言回覆

中序轉後序可以加上去吧, 這樣應該更完美。
_________________
人生真累呀
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作