没有输入结束的标志的时候,怎么能够保证每次输入数据的个数不同

题目描述ios

模拟STL stack类设计实现你的stack类,该类需具备入栈,出栈,判栈空,取栈顶元素等功能;利用该类实现本题要求。测试

输入描述spa

分别构造两个空栈,再读入若干对整数v、x; 1<=v<=2; 将元素x入第v个栈设计

输出描述code

最后将两个栈中元素出栈,并输出;每一个栈中元素占一行,元素间以空格分隔blog

样例输入ci

1 100
2 200
1 300
2 400 
1 50
1 60
2 80

样例输出it

60 50 300 100
80 400 200

 1 #include<iostream>
 2 using namespace std;  3 
 4 class Stack{  5     private:  6         int list[100];  7         int top;  8     public:  9  Stack(); 10         void push(const int &item); 11         int Pop(); 12         bool isEmpty() const; 13 }; 14 
15 Stack::Stack():top(-1){} 16 
17 void Stack::push(const int &item) 18 { 19     list[++top] = item; 20 } 21 
22 int Stack::Pop() 23 { 24     return list[top--]; 25 } 26 
27 bool Stack::isEmpty() const
28 { 29     return top == -1; 30 } 31 
32 int main() 33 { 34  Stack s1; 35  Stack s2; 36     int k,x; 37     while(cin>>k>>x) 38  { 39         if(k == 1) 40  { 41  s1.push(x); 42  } 43         if(k == 2) 44  { 45  s2.push(x); 46  } 47  } 48     while(!s1.isEmpty()) 49  { 50         cout<<s1.Pop()<<" "; 51  } 52     cout<<endl; 53     while(!s2.isEmpty()) 54  { 55         cout<<s2.Pop()<<" "; 56  } 57     
58 }

代码如上,栈只是很简单地实现了一下。io

这道题让我纠结的是,样例输出中,没有输出结束的标志,也没有一开始让你输入一个数据,表示本次输入有几组数据。因此一开始我就简单的看了一下输入样例中有7组数据,因此用for(int i=0;i<7;i++)来循环输入数据,因此第一组测试数据是没问题的,但其余组的测试数据,由于不是7组了,因此所有错误。class

而后不知道该怎么操做了,还觉得是这道题出的有问题,但我请教了一下别人,说是用

while(cin>>x)

{

……

}

我把代码改动了一下,测试数据就都经过了。

由于之前写过几道OJ的题,因此知道这种写法,能够来用来输入多组数据。

但背后的机制我应该仍是没搞明白,就算是这样写,测试数据不也仍是那几个吗,也没有输入让while循环结束的标志,可能有?但我不知道?

不知道为何,但仍是AC了。

因此先把这个问题思路记着,之后知道缘由的话,再来补充吧。

 

多是测试数据的最后有一个文件结束的标识符,while(cin>>x)识别到了这个,因此循环就结束了。

相关文章
相关标签/搜索