2013-10-10 116 views
1

我正在學習C++編寫一個程序來計算每個不同值在輸入中出現的連續次數。在C++中計數連續的次數?

的代碼是

#include <iostream> 
int main() 
{ 
    // currVal is the number we're counting; we'll read new values into val 
    int currVal = 0, val = 0; 
    // read first number and ensure that we have data to process 
    if (std::cin >> currVal) 
    { 
     int cnt = 1; // store the count for the current value we're processing 
     while (std::cin >> val) 
     { // read the remaining numbers 
      if (val == currVal) // if the values are the same 
       ++cnt; // add 1 to cnt 
      else 
      { // otherwise, print the count for the previous value 
       std::cout << currVal << " occurs " << cnt << " times" << std::endl; 
       currVal = val; // remember the new value 
       cnt = 1; // reset the counter 
      } 
     } // while loop ends here 
     // remember to print the count for the last value in the file 
     std::cout << currVal << " occurs " << cnt << " times" << std::endl; 
    } // outermost if statement ends here 
    return 0; 
} 

但它不會算上最後一組數字。例如:如果我輸入5 5 5 3 3 4 4 4 4,則輸出爲:

5發生5次。 3發生2次。

最後設定的結果是「4出現4次」。沒有出現。

我想知道代碼有什麼問題。

請幫忙。

謝謝。

hc。

+0

程序似乎此相關的問題至 在[ideone ...]上正常工作(http://ideone.com/zddsRo) – smac89

回答

0

您的程序是正確的。當條件爲假

while (std::cin >> val) 

,當你達到文件(EOF),它從一個終端就可以使用Ctrl-d輸入端的流輸入將返回false while循環將退出。

嘗試將您的輸入放在一個文件中,並且您的程序將工作。我已使用cat命令從終端的標準輸入複製並將其重定向到名爲input的文件。您需要按Ctrd-D來告訴cat您已完成。您也可以使用您最喜愛的編輯器創建input文件。

$ cat > input 
5 5 5 3 3 4 4 4 4 
<press Ctrl-D here> 

現在調用程序並從文件重定向輸入

$ ./test < input 

輸出是

5 occurs 3 times 
3 occurs 2 times 
4 occurs 4 times 

參見SO

the question on while (cin >>)

0

您似乎只在(val == currVal)爲false時纔會生成輸出。是什麼讓你認爲這會發生在從輸入中讀取最後4個之後?