2

我正在 MIT OCW 上介绍 C++,下面的代码在教授的第一个问题集中给出,作为计算阶乘的基本程序,还有一些相关的问题。

#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。也许有人有想法?谢谢你的时间。

4

2 回答 2

7

改变:

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

到:

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

编译器正在将多字符文字'.\n'转换为整数11768。此行为是实现定义的。

于 2013-08-06T21:13:07.810 回答
2

可能应该学习使用 endl,否则您会在某些时候对未刷新的流感到困惑。我知道我有。并不是说这是一个未刷新的流问题,但是如果他习惯性地使用 endl,OP 就不会遇到这个问题。

于 2013-08-06T21:49:13.980 回答