2015-12-01 54 views
0

我無法解析該文件的末尾:的std ::函數getline被困在管道輸入

1 

3 
John Doe 
Jane Smith 
Jane Austen 
1 2 3 
2 1 3 
2 3 1 
1 2 3 
3 1 2 

與以下程序:

#include <iostream> 
#include <sstream> 

int main(int argc, char * argv[]) 
{ 

    int cases, candidates_number; 
    char candidates[20][80]; 
    int votes[20][1000]; 
    int votes_count[20]; 

    std::string line; 

    std::cin >> cases; 
    std::cin.get(); 
    std::cin.get(); 

    for (int i=0; i<cases; i++) { 

     std::cin >> candidates_number; 
     std::cin.get(); 

     for (int j=0; j<candidates_number; j++) { 
      std::cin.getline(candidates[j], sizeof(candidates[j]), '\n'); 
     } 

     int votes_number = 0; 

     while (std::getline(std::cin, line)) { 
      if (line.empty()) { 
       break; 
      } 
      std::cout << line; 
      votes_number++; 
     } 

    } 
    return 0; 
} 

尤其是過程卡在同時在閱讀文件的最後一行之後循環。我通過Eclipse中的「標準輸入」功能調用我的程序。

爲什麼不是std::getline失敗並導致程序完成?


問題要求:

澳大利亞選票要求選民在排名順序 選擇的所有候選人。最初只計算第一選擇,如果 一個候選人收到超過50%的投票,那麼候選人 被選中。但是,如果沒有候選人獲得超過50%,則排除所有與最低票數並列的候選人。首先排列這些候選人的票數 重新計入他們的 排名最高的未淘汰候選人。這種消除 最弱的候選人並計算他們的選票以支持 優選的未淘汰候選人的過程一直持續到一個候選人 收到超過50%的投票或直到所有剩餘候選人 並列。

輸入

輸入具有單個正整數開始於一個行本身 表示以下情況下的數量,每一個,如下所述。 這行後面跟着一個空行。兩個連續輸入之間還有一個空行 。

每種情況的第一行是一個整數n $ \ le $ 20,表示 候選人數。接下來的n行由 候選人的名稱組成,每個長度最多80個字符,並且包含 任何可打印字符。多達1000行,其中每個包含 的投票內容。每張選票以一定順序包含從1到n 的數字。第一個數字表示第一個 選擇的候選人;第二個數字表示第二選擇的候選人,所以 。

輸出

每個測試用例的輸出由任一含有贏家或含誰綁所有考生的 名稱幾行的名稱的一個單行 的。每兩個連續的情況的輸出由空行分隔。

+1

你已經給了它很多的輸入,它會等待更多。 – David

+1

代碼如我所料終止。 –

+0

請不要混用'std :: cin'和'std :: getline' - 這是一團糟。 – erip

回答

0

該方案實際上是正確的,但我是喂以錯誤的方式通過Eclipse中輸入文件(它被視爲交互式輸入):

enter image description here

使用程序參數< input代替工作如期望的那樣使用`getline`用`cin`只會永遠等待從標準輸入多個輸入無論怎樣

enter image description here