#5077: 有關 line 5 的測試結果


onearth (Mr. Monkey)

學校 : 國立交通大學
編號 : 4993
來源 : [140.113.65.198]
最後登入時間 :
2012-10-04 12:59:14
d016. 後序運算法 | From: [125.227.129.106] | 發表日期 : 2011-04-24 15:18

請問 line 5 為什麼一直都不會過呢?
程式碼如下: 
 
#include<stdio.h>
char s[999];    //設為全域 
struct stack{
    long a[999];
    long sp;
    void push(int x){
        a[++sp] = x;
    }
    
    long pop(){
        if(sp >= 0){
            return a[sp--];
        }else{
            return 0;
        }
    }
      
};
void chop(char *s){
    long i = 0;
    while(s[i++] != '\n');
    s[--i] = 0;
}
int main(){
    struct stack gg; gg.sp = -1;
    s[0] = 0;
    long ele = 0; long i = 0;  long ele1 = 0; long ele2 = 0;
    while(fgets(s, sizeof(s), stdin)){
        if(feof(stdin))break; chop(s);
        yy:
            while(!(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '%' || s[i] == 0)){
                ele = 0;
                while(s[i] != ' '){
                    ele = ele*10 + (s[i++]-'0');  //算出 ele
                }
                gg.push(ele);                   //把運算元丟入堆疊
                i++;
            }
        //遇到運算子就把裡面的兩個數字拿起來做運算
            if(s[i] != 0){
                ele2 = gg.pop();
                ele1 = gg.pop();
                
                if(s[i] == '+')
                    gg.push(ele1 + ele2);
                else if(s[i] == '-')
                    gg.push(ele1 - ele2);
                else if(s[i] == '*')
                    gg.push(ele1 * ele2);
                else if(s[i] == '/')
                    gg.push(ele1 / ele2);
                else if(s[i] == '%')
                    gg.push(ele1 % ele2);
                    
                if(s[++i] != 0){
                    i = i + 1;                      //下一個必定是空白 
                    goto yy;    
                }else{
                    printf("%d\n", gg.pop());
                }
            }
        s[0] = 0;   //初始化
        i = 0;
        ele = 0; 
    }
    return 0;
}

 
ZeroJudge Forum