所以它是凌晨5点。我在哪里,我很困惑和沮丧。我以前创建了这样的程序,但无法理解发生了什么。
我创建了一个非常简单的阶乘程序,并对逻辑进行了双重检查,但每次输入一个大于2的数字时,程序就会进入一个不断打印出来的循环" inf"。我无法看到程序本身的任何错误。 :(
#include <iostream>
using namespace std;
int main() {
double userNumber = 0;
double i = 1;
cout << "This program will calculate the factorial of the number you enter.\nPlease enter your number now: ";
cin >> userNumber;
for ( i = 1; i < userNumber; i++ ) {
userNumber *= i;
cout << userNumber;
}
cout << "\n\nThe factorial is " << userNumber << "." << endl;
return 0;
}
适用于1和2:
但是只要你做3或更高......
我暂时还没有创建一个C ++程序,但是对于我的生活来说,看不出有什么问题。这只是一个非常明显的语法错误,还是我的计算机最终打破了我?
编辑:我刚刚将数字从double更改为int,这就是我得到的:
我仍然不明白为什么会这样做。我没有看到for循环或其他任何问题...
哎呀。 Smashes走进办公桌
答案 0 :(得分:4)
更改
for ( i = 1; i < userNumber; i++ ) {
到
for ( i = userNumber - 1; i > 1; --i ) {
请注意,您的代码会在循环体中更改userNumber
,因此只有在userNumber
溢出时,循环才会终止。
答案 1 :(得分:0)
for ( i = 1; i < userNumber; i++ ) {
userNumber *= i;
cout << userNumber;
}
这是问题:让userNumber
= 5
i = 1,userNumber
= 5
i = 2,userNumber
= 10
i = 3,userNumber
= 50 ......
并且循环继续。因为每次i<userNumber
。
同样作为一般建议,不要比较双打,使用(a-b) < epsilon;
,其中elipson是精确的。
答案 2 :(得分:0)
问题在于你使用一个变量作为循环限制和运行累加器 - userNumber
每次循环都会增加,所以你永远不会到达它。
(表达式i < userNumber
不使用开始循环时的值userNumber
,但总是在循环的每一轮之后与当前值进行比较。)
为结果使用单独的变量:
int factorial = 1;
for ( i = 1; i < userNumber; i++ ) {
factorial *= i;