2013-12-15 50 views
0

以下程序應計算用戶輸入整數的次數。例如:用戶輸入42 42 10 10.程序應該輸出:42發生2次,10發生2次。錯誤的輸出。 C++ primer 1.4.4

問題:代碼將不會輸出數字10的最後結果,直到您輸入另一個數字。我粘貼下面的代碼。這段代碼來自C++ primer。 1.4.4

#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; 
} 
+1

按照原樣使用代碼,您需要輸入一個非數字字符串以及這些數字,您將得到計數而不必輸入新的數字。 – splrs

+0

@splrs,我對編程非常陌生。你能提供一個「非數字字符串」的例子嗎?還是糾正輸出問題所需的代碼示例? – Matt

+0

嘗試輸入10 10 42 42 _z_。這將給你正確的計數,並不會開始另一個,即程序將完成。 – splrs

回答

2

您的正在編寫的程序對於由空格分隔的一系列數字輸入顯示正確。

您需要給程序一個文件結束指示,以便它將退出while循環並打印最終數據的計數。在Windows中,您可以通過在新行上輸入[Ctrl] - [Z]作爲第一個字符來完成此操作。在Linux,UNIX和Mac OS X中,[Ctrl] - [D]也有類似的用途。

或者,您可以將您的一組值設置爲文本文件並使用重定向來提供您的程序。例如,假設您將數據放入名爲data.txt的文件與您的可執行文件位於同一目錄中。

myprogram < data.txt 

正如一些人所指出的,一個非數字輸入也將在地方文件結尾的工作:在終端窗口中,你可以按如下運行您的程序。例如,您可以輸入42 42 10 10 fred,並輸出您期望的結果。不過,這似乎並不是該計劃的意圖。例如,如果輸入42 42 10 10 fred 37,程序將停止在fred,並且不會看到37

+0

這是一個很好的答案,應該被接受。坦率地說,這本書的這一部分有點可怕。 – neuronet