【发布时间】:2015-03-19 12:05:21
【问题描述】:
我正在开发一个允许用户练习除法的程序。我的代码如下:
//div1
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
using namespace std;
#define CLS "\033[2J\033[1;1H"
#define NEWLINE "\n"
int main() {
srand(time(NULL));
int a, div1, div2;
div1=rand()%11;
div2=rand()%11;
while (div2>div1) {
swap(div1,div2);
continue;
}
if (div1%div2!=0) {
return main();
} else {
cout << CLS;
cout << NEWLINE;
do {
cout << div1 << " / " << div2 << " = ?" << endl;
cin >> a;
cout << CLS;
cout << NEWLINE;
cout << "\t\tWrong!!" << endl;
cout << NEWLINE;
} while (a!=div1/div2);
cout << CLS;
cout << NEWLINE;
cout << "\t\tCorrect!!" << endl;
cout << NEWLINE;
cout << "Hit enter to continue." << endl;
cin.ignore();
cin.get();
return main();
}
return 0;
}
基本上,它应该做的是首先选择两个随机数。然后,它应该检查第二个数字(div2)是否大于第一个(div1),如果是,它将切换它们。然后,它将使用模数 (div1%div2) 来确保这两个数字可以彼此相除而没有余数。如果它们不能被除而没有余数,它将重新启动程序(return main();)。但是,每当我运行它时,我都会收到 segmentation fault: core dumped,无论是在我启动它时还是在运行它几次之后。有想法该怎么解决这个吗?
谢谢!!
【问题讨论】:
-
return main();请不要那样做。 -
那我应该用什么? system() 调用?
-
return main() 基本上是对 main 的递归调用,这会让你陷入无限循环,最终会溢出堆栈。因此,分段错误。您的程序需要连续结束或循环,但通常(不是通过递归调用,因为这会溢出您的堆栈)取决于您要执行的操作。
-
好吧,我可以转储返回的 main()。但是,如果模数为 (div1%div2!=0) 的部分失败,我应该使用什么来重新启动程序?
-
与其重新启动程序,不如使用 while(true) 并编写程序,这样它就可以连续循环而无需再次调用自己。
标签: c++