Я работаю над программой, которая позволяет пользователю практиковать деление. Мой код ниже:ошибка сегментации C++ (ядро сбрасывается) с модулем
//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();). Однако всякий раз, когда я запускаю его, я получаю ошибку сегментации : ядро сбрасывает либо при запуске, либо после запуска нескольких раз. Есть какие нибудь идеи как это починить?
Спасибо!
'return main();' пожалуйста, не делайте этого. – WhozCraig
Что следует использовать тогда? system()? – pdf4664
return main() - это в основном рекурсивный вызов main, и это заставит вас застрять в бесконечном цикле, который в конечном итоге переполнит стек. Следовательно, ошибка сегментации. Ваша программа должна либо закончен, либо циклически работать, но обычно (не через рекурсивный вызов, так как это переполнит ваш стек) в зависимости от того, что вы пытаетесь сделать. –