排列和组合 - 运行时失败

时间:2009-06-23 02:16:42

标签: c++

该程序从用户输入中获取2个数字,询问他们是否想要找出排列或组合,然后输出结果。这是代码。

#include "std_lib_facilities.h"

int permutation(int first, int second)
{
int top_fac;
int bottom_fac;
for (int i = first-1; i >= 1; --i)
    top_fac *=i;
for (int i2 = (first-second)-1; i2>=1; --i2)
    bottom_fac *= i2;
return (top_fac/bottom_fac);
}

int combination(int first, int second)
{
int bottom_fac;
for (int i = second-1; i>=1; --i)
    bottom_fac *= i;
return permutation(first, second)/(bottom_fac);
}

int main()
{
cout << "Enter two numbers.\n";
int first = 0;
int second = 0;
cin >> first >> second;
cout << "Now choose permutation(p) or combination(c).\n";
string choice;
cin >> choice;
if (choice == "p") 
   cout << "Number of permutations: " << permutation(first,second) << endl;
else if (choice == "c")
   cout << "Number of combinations: " << combination(first,second) << endl;
else
   cout << "p or c stupid.\n";
keep_window_open("q");
}

当我尝试运行程序时,我选择p或c,我得到“permutations_combinations.exe已停止工作”消息。我试图抓住一个错误,但没有任何事情发生。有什么想法吗?

提前致谢。

5 个答案:

答案 0 :(得分:4)

您没有初始化函数内的局部变量top_facbottom_fac。与其他语言不同,局部变量不会初始化为任何东西,特别是在C或C ++中。它们接收的值是调用函数时堆栈上发生的任何垃圾。您应该在top_facbottom_fac函数的开头将permutation()combination()明确初始化为1。

我猜测bottom_fac意外地被初始化为0,然后你在函数末尾除以0,这导致你看到的运行时失败。

答案 1 :(得分:1)

请务必初始化top_facbottom_fac

答案 2 :(得分:0)

未初始化的变量。

答案 3 :(得分:0)

我猜你的输入导致你的一个for循环无限循环。仔细检查一下。

答案 4 :(得分:0)

建议 - 了解如何使用调试器。即使你在Linux上开发,你也有一个IDE可以帮助你逐步完成代码 - http://monodevelop.com/(以及其他)。在函数顶部设置断点会显示您的变量未被初始化。