该程序从用户输入中获取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已停止工作”消息。我试图抓住一个错误,但没有任何事情发生。有什么想法吗?
提前致谢。
答案 0 :(得分:4)
您没有初始化函数内的局部变量top_fac
和bottom_fac
。与其他语言不同,局部变量不会初始化为任何东西,特别是在C或C ++中。它们接收的值是调用函数时堆栈上发生的任何垃圾。您应该在top_fac
和bottom_fac
函数的开头将permutation()
和combination()
明确初始化为1。
我猜测bottom_fac
意外地被初始化为0,然后你在函数末尾除以0,这导致你看到的运行时失败。
答案 1 :(得分:1)
请务必初始化top_fac
和bottom_fac
。
答案 2 :(得分:0)
未初始化的变量。
答案 3 :(得分:0)
我猜你的输入导致你的一个for循环无限循环。仔细检查一下。
答案 4 :(得分:0)
建议 - 了解如何使用调试器。即使你在Linux上开发,你也有一个IDE可以帮助你逐步完成代码 - http://monodevelop.com/(以及其他)。在函数顶部设置断点会显示您的变量未被初始化。