2009-09-11 4 views
0

Я написал программу в c. Однако, как только программа завершена, она останавливается (duh). Есть ли простой сценарий, который позволяет мне снова запустить программу?позволяют пользователю снова запускать программу в c?

+0

Какова ваша среда? Unix, Windows? – Shizzmo

+0

unix, однако он также должен работать в окнах :( – HollerTrain

+1

Существует много «почему». Позвольте мне предположить. Перезапуск: сбрасывает глобальное состояние, освобождает память обратно в ОС, «исправляет» все утечки памяти, позволяет вам передавать информацию когда вы его использовали, и давайте рассмотрим только один путь, который проще, чем считать два. Я все для него. –

ответ

0

Конечно, но как бы вы попросили пользователя запустить этот скрипт? Разве не проще, если бы пользователь просто перезапустил программу?

+0

нет простого способа запустить сценарий заново? – HollerTrain

3

Почему бы не использовать петлю (для, в то время) в главном себе: (если программа просто!)

main() 
{ 

while(Exit condition) 
{ 
    //logic 
} 
} 
2
char cont_prog = 'n'; 
do { 
    /* main program in here */ 
    printf("Do you want to start again? (y/n): "); 
    cont_prog = getchar(); 
} while (cont_prog == 'y' || cont_prog == 'Y'); 

По сути, вы хотите, чтобы поставить вас главный прогу в цикле, задавая если они хотят продолжить. Вам приходится иметь дело с тем, что пользователь вводит слишком много данных (например, они печатают «да»), и ваш буфер заполняется в следующий раз через цикл.

+0

+ 1 для дополнительного улучшения кода. Кроме того, правила Futurama –

+0

\ m/for Fry! Я понимаю, что этот фрагмент довольно рудиментарный, но пользователь был неопределенным, поэтому я не могу дать гораздо больше. –

+0

спасибо за код однако, это побуждает меня начать снова, и когда я набираю 'y', он ничего не делает :( – HollerTrain

1

Если вы действительно хотите, чтобы повторно запустить программу без выхода (хотя я не могу понять, почему):

  1. Сохранить argv (и я буду считать, что argv[0] фактически указывает на свой исполняемый файл, даже если это не гарантируется), если вы хотите использовать те же аргументы командной строки.
  2. Рассмотрите возможность сохранения среды, если вы можете ее изменить, а также хотите, чтобы она повторялась.
  3. man execv или execle. Просто замените текущее запущенное изображение новым, имеющим ту же командную строку

Откровенно говоря, цикл будет проще и может иметь одинаковую семантику, если вы избегаете глобального состояния или устраиваете возможность повторного набора Это.

0
#include <stdlib.h> 
#ifdef WIN32 
#define EXECUTABLE ".exe" 
#else 
#define EXECUTABLE 
#endif 
int main(void) { 
    for (;;) system("executable_in_c" EXECUTABLE); 
    return 0; 
} 

компиляции этой программы, переименовать старый исполняемый на "executable_in_c [.exe]"; переименуйте это в имя своего старого исполняемого файла ... вуаля!

Смежные вопросы