1. 程式人生 > >沒有輸入結束的標誌的時候,怎麽可以保證每次輸入數據的個數不一樣

沒有輸入結束的標誌的時候,怎麽可以保證每次輸入數據的個數不一樣

emp name 實現 while turn code {} 錯誤 void

題目描述

模擬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了。

所以先把這個問題思路記著,以後知道原因的話,再來補充吧。

沒有輸入結束的標誌的時候,怎麽可以保證每次輸入數據的個數不一樣