Скомпилированные скрипты c остаются открытыми только в течение доли секунды - PullRequest
2 голосов
/ 16 февраля 2012

начинающий хобби-программист здесь. Я привык запускать C в OSX, компилируя с GCC, но недавно мне пришлось переключиться на Windows. Я компилирую свой код с помощью Microsoft Visual Studio Express 2010. Компиляция идет нормально, но после этого, когда я пытаюсь запустить его, он только мигает, открывается в течение миллисекунды и затем закрывается. Как это исправить?

Это происходит со всеми сценариями, которые я пробовал, но вот один, в частности, классический конвертер Фаренгейта и Цельсия от K & R, который не работает. Если это глупый вопрос, извините. Только начал изучать C две недели назад.

 #include <stdio.h>

    main()
   {
     int fahr, celsius;
     int lower, upper, step;
     lower = 0;     
     upper = 300;    
     step = 20;    
     fahr = lower;
     while (fahr <= upper) {
         celsius = 5 * (fahr-32) / 9;
         printf("%d\t%d\n", fahr, celsius);
         fahr = fahr + step;
      }
   }

Ответы [ 4 ]

3 голосов
/ 16 февраля 2012

поставьте getch() перед вашей окончательной скобкой }, для этого потребуется нажать клавишу до выхода из программы

единственная причина, по которой я предлагаю это, а не ctrl-f5, заключается в том, что она учит вас другой команде C:)

[править]
Позвольте мне добавить немного больше информации к тому, что вы делаете.

Правильная подпись для main - это int main(int argc, char **argv), это значение, которое вы должны иметь в своей программе (для замены единственной строки main(), которая в данный момент существует.

Вам не нужно ничего делать с этими переменными (argc & argv), они могут быть не использованы вами, программистом. Однако наличие предшествующего int в имени функции (main) означает, что ожидается возвращение значения. Опять же, вам, наверное, все равно. Тем не менее, в будущем вы или кто-то, кто несет ответственность за ваш код, будет заботиться. Это означает, что ваша main функция должна возвращать какое-то значение, что указывает на ее успех или неудачу в базовой операционной системе (также что-то, что нужно использовать, если вы используете свои программы в сценарии оболочки).

В настоящее время простой return(0) после вышеупомянутого getch() будет хорошо выполнять свою работу.
[/ Править]

2 голосов
/ 16 февраля 2012

Звучит так, как будто вы пытаетесь запустить программу под отладчиком с F5 . После успешного завершения отладчик немедленно выйдет. Попробуйте запустить за пределами отладчика, и он остановится для нажатия клавиши после завершения: Ctrl + F5

Примечание. Сценарий терминологии не совсем точен для C. Скомпилированный язык и, следовательно, обычно называется программами вместо сценария.

1 голос
/ 16 февраля 2012

Программа, которую вы цитируете, преобразует диапазон температур по Фаренгейту в градусы Цельсия, печатает результаты и сразу же завершает работу. Это просто то, что говорит исходный код: в нем ничего нет, чтобы он оставался открытым.

Если вы компилируете и запускаете в среде Unix, вы, скорее всего, запускаете его из оболочки, внутри (виртуального) терминала, и когда программа завершает работу, оболочка выдает вам новое приглашение, но оставляет выходные данные программы. виден над ним В Windows, однако, стандартный способ запуска программы не предусматривает использование оболочки или окна терминала, поэтому программа просто записывает свой вывод в то место, которое вы не видите, и выходит из него (или открывает окно терминала, но закрывает его сразу после него). заканчивает работу).

Чтобы увидеть вывод в Windows, вы можете открыть окно терминала самостоятельно (запустить cmd.exe) и запустить программу оттуда, или вы можете добавить вызов getch() в конце, чтобы заставить программу ждать нажатия клавиши до его выхода.

0 голосов
/ 16 февраля 2012

Вы можете запустить исполняемый файл непосредственно из командной строки, а не из среды IDE, или вызвать некоторый ввод в конце main (), чтобы оставить окно открытым.

...