題目是要實現進制轉換,各函數已定義template<class type>void DSeqStack<type>::convertion(){int s,n;cout<<"輸入一個需要轉換的數據:"<<endl;cin>>s;cout<<"輸入一個需要轉換成的進制:"<<endl;cin>>n;while(s!=0){Push(s%n);s=s/n;}cout<<"數據轉換成"<<n<<"進制后為:"<<endl;while(!isEmpty())cout<<Pop();cout<<endl;/*cout<<"數據轉換成"<<n<<"進制后為:"<<Pop()<<endl;*/}void main(){DSeqStack<int> stack(10);stack.convertion();}已經限定s!=0了,棧就一定不為空,為什么還需要while(!isEmpty),而且去掉while(!isEmpty)就只輸出一個數了
2 回答

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
s!=0是確定棧非空
再執行以下程序
不然空的也執行,不是浪費資源嗎?而且也會最后出錯。
是程序開始的斷點.必須要有!
while(!isEmpty)是輸出循環判定條件
意在循環
目的就是把棧中元素全部輸出,一直做出棧運算
直到???br/>是動態循環的
缺失此循環條件,只輸出當前的棧頂元素,程序結束。
是靜態的

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
while(!isEmpty())
cout<<Pop();
cout<<endl;
這三句語句相當于
while(!isEmpty())
{
cout<<Pop();
cout<<endl;
}
C++中的Pop()函數和Push()一樣,一次進棧只能進一個,一次出棧也只能出一個數。所以必須要循環輸出
至于循環條件為什么要用IsEmpty(),是因為如果棧中的數據全部取出來的話,編譯器會自動生成標識,標記棧為空,IsEmpty()得到的就是0,就跳出循環了
- 2 回答
- 0 關注
- 392 瀏覽
添加回答
舉報
0/150
提交
取消