沒有輸入結束的標誌的時候,怎麼能夠保證每次輸入數據的個數不同

題目描述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)識別到了這個,因此循環就結束了。

相關文章
相關標籤/搜索