没有输入结束的标志的时候,怎么可以保证每次输入数据的个数不一样

题目描述

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

输入描述

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

输出描述

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

样例输入

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

样例输出

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 }

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

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

然后不知道该怎么操作了,还以为是这道题出的有问题,但我请教了一下别人,说是用

while(cin>>x)

{

}

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

因为以前写过几道OJ的题,所以知道这种写法,可以来用来输入多组数据。

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

不知道为什么,但还是AC了。

所以先把这个问题思路记着,以后知道原因的话,再来补充吧。

猜你喜欢

转载自www.cnblogs.com/haook/p/10695597.html