Во-первых, вы не должны звонить main
в любой точке вашего кода.Если вы хотите перезапустить, просто закодируйте цикл, который продолжается до условия завершения.Я не могу вспомнить, является ли рекурсивный вызов main
действительным в соответствии со стандартом, но, даже если он был, , вы рискуете потерпеть крах из-за неконтролируемой рекурсии.запись (только клавиша ENTER), чтобы завершить ввод, вы можете использовать fgets
, чтобы получить строку (пустую или нет), а затем оценить это.
Я всегда указываю людям на мою надежную функцию пользовательского ввода и, если вы используете это, вы можете просто написать что-то вроде:
// Force initial entry into loop
int rc = RC_NO_INPUT;
char buff[] = {`x', '\0`};
:
// Run loop until empty input.
while ((rc == OK) && (*buff != '\0')) {
// Do whatever you need to do here.
// Get input, 'while' loop will check it.
rc = getLine ("ENTER to exit, anything else to continue: ",
buff, sizeof (buff));
}