C_and_CPP 板


LINE

※ 引述《hck13kimo (清心寡愈)》之銘言: : #include <stdio.h> : #include <stdlib.h> : #define Stacksize 80 : #define TRUE 1 : #define FALSE 0 : int input_infix(char); // 中序轉後序 : char priority(int); // 決定運算子優先順序 : void evalute_subvalue(int); //計算程式 : void Push_operand(struct stack_operand int*, int);//放值進運算元堆疊 ^^^^^^^^^^^^^^^^^^^^ ^^^^ 在這一行我還不認識struct stack_operand 且你用了內建型別int當作變數名稱 : void Push_operator(struct stack_operator char*, char);//放值進運算子堆疊 ^^^^^^^^^^^^^^^^^^^^^ ^^^^ 同上 : int Pop_operand(struct stack_operand int*);//拿運算元出堆疊 ^^^^^^^^^^^^^^^^^^^^ ^^^^ 同上 : char Pop_operator(struct stack_operator char*);//拿運算元出堆疊 ^^^^^^^^^^^^^^^^^^^^^ ^^^^^ 同上 : //////////////////////////////////// : /* 運算元堆疊宣告 */ : //////////////////////////////////// : struct stack_operand : { : int top; : int stack[Stacksize]; : }; : //////////////////////////////////// : /* 運算子堆疊宣告 */ : //////////////////////////////////// : struct stack_operator { : char top; : char stack[Stacksize]; : }; : //////////////////////////////////// : /* 主程式 */ : //////////////////////////////////// : int main(void) : { : int input[Stacksize]; ^^^ : printf("輸入運算式:"); : scanf("%s", input); 這裡接收字串,可能會使int input任何一個int存有1個(包含)以上的char : input_fix(input); ^^^^^^ input_fix期待接收char input不是一個char型別 無法從int[80]轉換成char 由int*轉為char一定會遭受截斷 : system("pause"); : return 0; : } : //////////////////////////////////// : /* 中序轉後序 */ : //////////////////////////////////// : int input_infix(char* infix) ^^^^^^ input_infix函式原型不一致 input_infix原先的宣告 int input_infix(char) : { : int i=0; : char symb; : int op; : struct stack_operand ope_rand; : struct stack_operator oper_ator; : ope_rand.top = -1 ; : oper_ator.top = -1 ; : while(!'\0') '\0' == 0 !0 恆等於1 這不是語法錯誤,但一定跟你表達的有差 : { : symb = infix[i]; : if (symb = '+'||'-'||'*'||'/'){ ^^^^^^^^^^^^^^^^^^^^^^^^^^ symb = ('+' || '-' || '*' || */') symb得到的是1,不過這裡不會有語法錯誤,只是一定跟你要表達的有差 : Push_operator(*oper_ator.top, symb); ^^ 對於一個struct stack_operator.top (char) 沒有dereference操作 : } : else : { : if (symb == ')') : { : while((op = Pop_operator(*oper_ator.top))!='(') : { : evalute_subvalue(op); : continue; : } : } : else : { : while (priority(symb) <= priority(oper_ator.top)) : { : op = Pop_operand(*ope_rand.top); ^^ 對於一個struct stack_operand ope_rand.top (int) 沒有dereference操作 : evalute_subvalur(op); : } : Push_operator(*oper_ator.top, symb); ^^ 同struct stack_operator.top問題 : while() ^^ 必須是一個boolean表示式 : { : op = Pop_operand(*ope_rand.top); ^^^^^^^^^^ 同struct stack_operator.top問題 : evalute_subvalue(op); : } : printf("ans:%c",*ope_rand->stack[0]); ope_rand沒有operator-> (ope_rand不是一個指向結構體的指標,stack未宣告) 假使ope_rand是一個指標 stack[ 0 ]是一個int 沒有dereference操作 : } : //////////////////////////////////// : /* 判斷運算元優先順序 */ : //////////////////////////////////// : int priority(char symb) ^^^^^^^^^^^^^^^^^^^^^^ 函式定義不一致 函式priority原型為 char priority(int) : { : int p; : switch(op) { ^^^^^ op第一次在這個函式出現,未知的符號 : case '+': case '-': : p = 1; : break; : case '*': case '/': : p = 2; : break; : default: : p = 0; : break; : } : return p; : } : //////////////////////////////////// : /* 計算函式 */ : //////////////////////////////////// : void evalute_subvalue(int op) : { : int a,b; : int op, new_value; : b = int Pop(*ope_rand.top); ^^^^ ope_rand在這個函式沒有定義及宣告 : a = int Pop(*ope_rand.top); ^^^^ 同上 : switch(op) : { : case '+': : return (new_value = a + b); ^^^^^^^^^^^^^^^^^^^^^^^^^^ 你在void函式return了int值,猜測你的evalute_subvalue(int op) 是不是int evalute_subvalue(int op) : case '-': : return (new_value = a - b); ^^^^^^^^^^^^^^^^^^^^^^^^^^ 同上 : case '*': : return (new_value = a * b); ^^^^^^^^^^^^^^^^^^^^^^^^^^ 同上 : case '/': : return (new_value = a / b); ^^^^^^^^^^^^^^^^^^^^^^^^^^ 同上 : } : Push(*ope_rand.top , new_value); ^^^^^^^^^^^^^^ 未知的符號 ope_rand : } : //////////////////////////////////// : /* PUSH */ : //////////////////////////////////// : void Push_operand(struct stack_operand *ps , int symb) : { : if(ps.top >= Stacksize - 1) : printf("The stack is full \n"); : retun FALSE ^^^^ ^^^^^ retun不是一個型別(compiler可能會這麼說) 期待在else前找到一個分號 : else ^^^^^ else找不到匹配的if (你少了個大括號) : ps->stack[++(ps->top)] = symb; : return; : } : void Push_operator(struct stack_operator *ps , char symb) : { : if(ps.top >= Stacksize - 1) : printf("The stack is full \n"); : retun FALSE; ^^^^^ retun不是一個型別 : else ^^^^ else找不到匹配的if : ps->stack[++(ps->top)] = symb; : return; : } : //////////////////////////////////// : /* POP */ : //////////////////////////////////// : int Pop_operand(struct stack_operand *ps) : { : if(ps.top < 0) : printf("The stack is empty \n"); : retun FALSE; ^^^^^ 請不要複製貼上 retun不是一個型別 : else ^^^^ else找不到匹配的if : return(ps->stack[ps->top --]); : } : int Pop_operator(struct stack_operator *ps) : { : if(ps.top < 0) : printf("The stack is empty \n"); : retun FALSE; ^^^^^ retun不是一個型別 : else ^^^^ else 找不到匹配的if : return(ps->stack[ps->top --]); : } : 小弟這個程式一直沒辦法compile... : 可是我找不到錯誤到底在哪... : 是語法有錯嗎?? : 還是其他的問題呢?? 兩者都有 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.227.127.39 ※ 編輯: sunneo 來自: 61.227.127.39 (04/06 16:03) ※ 編輯: sunneo 來自: 61.227.127.39 (04/06 16:19)
1F:推 hck13kimo:大感謝!!我知道了..我會再努力去修改 04/06 16:19
※ 編輯: sunneo 來自: 61.227.127.39 (04/06 16:22)
2F:→ hck13kimo:雖然還是不很了解QQ" 04/06 17:04
3F:→ sunneo:dereference操作只能對iterator/****Ptr類 或者指標 04/06 17:24
4F:→ sunneo:簡單的說就是先弄好你的函式實作跟原型的一致性 04/06 17:24
5F:→ sunneo:然後再變數宣告及範圍處理好,再把指標的問題解決掉 04/06 17:26
6F:→ sunneo:if/else把你想表達的範圍給弄上大括號 04/06 17:26
7F:→ sunneo:最後是你程式的排版問題... 04/06 17:26
8F:→ sunneo:關鍵字及保留字不該作為變數名稱 04/06 17:27
9F:→ sunneo:你還是先把語法弄好吧... 再嘗試把你的做法翻譯為程式 04/06 17:29







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP