2015-05-10 4 views
1

Я разработал простую консольную утилиту в C, которая анализирует различные текстовые файлы.Приостановить выполнение exe кода C

IDE - блоки кода ОС - Windows

Я намерен распространить его исполняемым.

Исполняемый работает отлично, однако в отличие от выполненного из IDE выполнение не приостанавливает/не ждет нажатия клавиши в конце выполнения.

Я попытался использовать getchar()/system ("pause"), но выполнение там не приостанавливается.

Есть ли альтернатива ждать нажатия клавиши перед прекращением выполнения, чтобы пользователь мог просмотреть выход?

ответ

3

Вы можете использовать

GetChar();

2 раза, потому что очень вероятно, что последний символ '\ n' newline будет потребляться вашим getchar().

или использовать

зсапЕ ("% С");

с этим дополнительным пространством

в конце файла.

+0

Thanks Namit, Я попробовал getchar, как вы сказали дважды, но выполнение не остановилось для нажатия клавиши. –

+0

Можете ли вы разместить свой код здесь? –

+0

Я попробовал свое предложение, как показано ниже 'int main() { node * temp1, * temp2; char script [255], ch; char * dev; FILE * fp; // логика чтения и разбора файлов // нет ввода от пользователя // только printf отображает прогресс/ошибки free (head); getchar(); getchar(); return 0; } ' так же я попробовал зсап («% С», &ch); // с пространством Это прекрасно работает, когда я запускаю его из IDE с ехом он не останавливается. –

0

Не используйте system("pause"), так как он не переносится. getchar должен работать с другой стороны. Можете ли вы опубликовать код? Возможно, что-то есть на буфере клавиатуры, который потребляется вашим единственным и только getchar звонком.

+0

Благодаря Пабло, Я попытался это 'свободный (руководитель);. GetChar(); GetChar(); // 2-й getchar, как предложил Намит выше return 0; } ' , но выполнение не будет приостановлено. –

3

Это зависит от того, как другие части вашего кода получают ввод от пользователя (т. Е. От stdin).

Подход getchar() будет работать нормально, если ваша программа ничего не читает от пользователя или не читает с использованием getchar().

Общее руководство, однако, должно быть последовательным в стиле ввода от каждого потока. Стиль ввода относится к символьно-ориентированным (функции, такие как getchar()), ориентированные на линию (например, fgets()), отформатированные (такие функции, как scanf()), или неформатированные (например, fread()). Каждая из этих функций выполняет разные действия в зависимости от ввода - например, getchar() будет читать новую строку как целое значение, fgets() оставит строку новой строки в конце строки, если буфер достаточно длинный, scanf() часто останавливается, когда он встречается новую строку, но оставить новую строку в потоке, которая будет читаться дальше.

Сетевой эффект заключается в том, что различные стили ввода будут взаимодействовать и могут создавать странные эффекты (например, данные игнорируются, не ожидая ввода, как вы видите).

Например, если вы используете scanf(), вероятно, вы также должны использовать scanf(), чтобы ваша программа ждала в конце.Not getchar() - потому что на практике может появиться новая строка, ожидающая чтения, поэтому getchar() вернется немедленно, и ваша программа не остановится перед завершением.

Существуют исключения из вышеизложенного (например, в зависимости от того, какая строка формата используется и что вводит пользователь). Но как правило: будьте последовательны в том, как вы читаете от stdin, и пользователю придется очень усердно работать, чтобы приостановить приостановку вашей программы до ее завершения.

Более простой альтернативой, конечно же, является запуск программы из командной строки (например, командной оболочки CMD.EXE). Затем оболочка начнет работать, когда ваша программа завершится, выход программы будет виден пользователю, поэтому ваша программа не должна останавливаться.

+0

спасибо Peter, однако я не принимаю никаких данных от пользователя, нигде в коде я не использовал getchar(), scanf(), gets(). Код имеет дело только с операциями чтения/записи файлов с использованием fscanf() и fprintf(). –

+0

Вам понадобится предоставить SMALL, но COMPLETE (в том смысле, что другие люди могут скомпилировать, связать и выполнить) образец кода, который иллюстрирует вашу проблему. Единственный способ, с помощью которого 'getchar()' не будет останавливаться, - это то, что есть вход в ожидании в 'stdin' - от пользователя,' stdin' перенаправляется, пересылается другим процессом и т. Д. Поэтому должно быть что-то еще, 't описано, что происходит в вашей программе, или в среде, в которой вы ее запускаете, или что пользователь делает это, чтобы вызвать поведение. – Peter

+0

Использование getchar() дважды, как предложено, исправил проблему. Спасибо –

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