2013-08-06 87 views
2

我在MIT OCW上介紹了C++,並將以下代碼作爲計算階乘因子的基本程序和幾個相關問題在教授第一個問題集中給出。C++ BEGINNER析因程序,混淆輸出

#include <iostream> 
using std::cout; 
using std::cin; 
int main() 
{ 
    short number; 
    cout << "Enter a number: "; 
    cin >> number; 
    cout << "The factorial of " << number << " is "; 
    int accumulator = 1; 
    for(; number > 0; accumulator = (accumulator * (number--))); 
    cout << accumulator << '.\n'; 
    system("pause>nul"); 
    return 0; 
} 

第一個問題是: 「當你輸入下列值您能得到什麼:0,1,2,9,10」

答案部分顯示爲「0:1; 1:1; 2:2; 9:362880; 10:3628800」,但這不是我所遇到的。 我的程序輸出「11768」每個顯然正確的答案,我不知道爲什麼。

答案集我看: 「0:111768; 1:111768; 2:211768; 9:36288011768; 10:362880011768」

也許有一些錯誤的代碼,但我沒有看到它。 我正在使用Visual Studio 2012.也許有人有一個想法?謝謝你的時間。

回答

7

變化:

cout << accumulator << '.\n'; 

到:

cout << accumulator << ".\n"; 

編譯器變換所述多字符文字'.\n'到整數11768。這個行爲是實現定義的。

+0

或'cout << accumulator <<「。\ n」;' – maditya

+0

@maditya,這正是我的答案所說的。你什麼意思? –

+1

顯然我忘記了如何閱讀。出於某種原因,我認爲你拿出了''',我提出了我認爲是另一種解決方案。所以這裏在技術上是實際的選擇:'cout << accumulator <<'\ n';' – maditya

2

可能應該學會使用endl,否則在某些時候您會被未刷新的流感到困惑。我知道我有。不要說這是一個不流利的流問題,但是如果他習慣性地使用endl,OP就不會有這個問題。