以下是关于C++栈的问题 while(!isEmpty) cout<<pop()

题目是要实现进制转换,各函数已定义
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)就只输出一个数了

慕桂英546537
浏览 223回答 2
2回答

慕姐8265434

s!=0是确定栈非空再执行以下程序不然空的也执行,不是浪费资源吗?而且也会最后出错。是程序开始的断点.必须要有!while(!isEmpty)是输出循环判定条件意在循环目的就是把栈中元素全部输出,一直做出栈运算直到栈空是动态循环的缺失此循环条件,只输出当前的栈顶元素,程序结束。是静态的

慕沐林林

while(!isEmpty())cout<<Pop();cout<<endl;这三句语句相当于while(!isEmpty()){cout<<Pop();cout<<endl;}C++中的Pop()函数和Push()一样,一次进栈只能进一个,一次出栈也只能出一个数。所以必须要循环输出至于循环条件为什么要用IsEmpty(),是因为如果栈中的数据全部取出来的话,编译器会自动生成标识,标记栈为空,IsEmpty()得到的就是0,就跳出循环了
打开App,查看更多内容
随时随地看视频慕课网APP