伊莉討論區
標題:
關於++ --以及函數問題 (已解決)
[打印本頁]
作者:
在那裡
時間:
2018-9-18 04:21 PM
標題:
關於++ --以及函數問題 (已解決)
本帖最後由 在那裡 於 2018-9-18 06:50 PM 編輯
小弟我在寫後續式運算時遇到了一個問題
程式碼如下:
#include <iostream>
using namespace std;
int count(int a,int b,char oper)
{
switch(oper)
{
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
case '%': return a%b;
default : return 0;
}
}
int main()
{
int Stack[4] = {1,2,99,97};
int top = 3;
int a,b;
b = Stack[top--];
a = Stack[top--];
Stack[++top] = count(a,b,'-');
//Stack[++top] = count(Stack[top--],Stack[top--],'-');
cout << "top:" << top << endl;
for(int i=0;i<4;i++)
cout << "Stack[" << i << "]:" << Stack
<< endl;
return 0;
}
為什麼用b與a去操作就可以成功運作,而註解內的那一行就會產生錯誤結果呢?
to snowflying:痾 難道不是由右往左?
作者:
jackyo04
時間:
2018-9-18 04:59 PM
C語言的原則,也是我一開始遇過的問題,前輩的回答是:先有雞還是先有蛋..
有時候為了方便會懶得去使用函數,也懶得去宣告..但C語言沒有那麼聰明XD
別為了一時方便而沒去宣告,有些Bug就是因為這些原因而產生的...
我之前也常遇到,改過這個習慣後就不會有這個問題了
作者:
advantise
時間:
2018-9-18 06:28 PM
這個是stack overflow, 你宣告 Stack[4] , 但是 ++top, 已經變成4, 超過範圍了, 而你宣告int a, b去接值時, 在stack又多宣告了2個int的位置, 所以用++top後你的stack會用到a或b的位置, 你可以把a, b的值print出來, 就知道了。
作者:
在那裡
時間:
2018-9-18 06:50 PM
也就是說,程式是先進行Stack[++top]左邊的式子,而非先進行count(Stack[top--],Stack[top--],'-')右邊的式子囉?那大概懂了。
嗯......還是不要使用這種模糊的運算式好了@A@
謝謝~
作者:
z1090128
時間:
2018-9-25 09:20 PM
top的初始位置是3,也是你矩陣最大的那個位置,在你使用++top時就超出了矩陣的大小了
作者:
johnwanz
時間:
2018-9-26 09:13 AM
簡單說, 單一行敘述句內, 同時對一個變數, 又++又--, 有超過一次的賦值動作, 印象裡, 這在標準上是屬於未定義行為, 故不同編譯器可能產生不同的結果. 即便恰好得到了想要的結果, 也只能說是運氣.
基本上, 應避免在同一敘述句內, 同時有多次的++/--. 寫程式應該要靠邏輯, 而不是運氣.
歡迎光臨 伊莉討論區 (http://www1005.eyny.com/)
Powered by Discuz!