C ++ BEGINNER факториальная программа, запутанный вывод

Я делаю введение в C ++ на MIT OCW, и следующий код дан в первой задаче профессора, установленной как базовая программа для вычисления факториалов, с несколькими связанными вопросами.

#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. Может быть, у кого-то есть идея? Спасибо за ваше время.

2

Решение

Изменить:

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

Для того, чтобы:

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

Компилятор преобразует многосимвольный литерал '.\n' в целое число 11768, Это поведение определяется реализацией.

7

Другие решения

Вероятно, следует научиться использовать endl, иначе в какой-то момент вы запутаетесь в нечетких потоках. Я знаю, что у меня есть. Не говоря уже о том, что это нерешенная проблема потока, но у OP не было бы этой проблемы, если бы он обычно использовал endl.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector