12

Существует проблема, которую не могу уже решить дня 2 минимум. Чем объявлять system("pause") в C++? Пробовал и <windows>, и <stdlib>, и <conio.h>, весь гугл обшарил, даже на getchar() пробовал заменить system, но после отладки проги консоль в упор закрывается :(

angry
  • 8,677
  • 18
  • 74
  • 182
Amorfius
  • 125
  • М-м-да... Смешать <stdlib.h> и ... Это надо еще уметь... Напишите что-то одно из них, и ставьте system("pause"). – 3JIoi_Hy6 Oct 17 '11 at 17:47

9 Answers9

19

Прекратите заниматься ерундой с вписыванием в код каких-то system("pause") и прочего мусора. Ничего подобного в консольном приложении быть не должно.

Если вы занимаетесь разработкой консольного приложения под MS Visual Studio, то идите в настройки проекта, раздел Linker и установите настройку SubSystem в значение CONSOLE

введите сюда описание изображения

После чего возьмите в привычку запускать свое приложение не в отладочном режиме ("Start Debugging", F5), а в режиме "без отладчика" ("Start Without Debugging", Ctrl+F5). Консольное окно в таком случае не будет закрываться само, а будет оставаться на экране до следующего нажатия клавиши.

Запуск же программ под отладчиком (F5) предназначен для ситуаций, когда у вас в коде есть точки останова, т.е. при запуске под отладчиком вас проблема автоматического закрытия окна волновать не должна вообще.


В VS2017, начиная с определенной версии, появилась опция отладчика, которая предотвращает закрытие консольного окна по завершении программы, независимо от того, запускали ли вы вашу программу в режиме отладки

введите сюда описание изображения

18

Внимание! Правильный ответ на вопрос был уже дан пользователем Андрей: функция system объявлена в заголовочном файле cstdlib (или stdlib.h). Пожалуйста, не добавляйте новых ответов вида "я подключил N и все заработало", где N - очередной заголовок, косвенно включающий cstdlib.


В Microsoft Visual Studio, например, при запуске по Ctrl+F5, IDE сама будет запускать программу, как будто бы в ней ожидается ввод в конце.

Еще варианты решения:

  • MS-овская функция _getch() из <conio.h>
  • std::cin >> c, где c - это char c. Правда, придется нажимать еще и enter.
  • Breakpoint на закрывающей скобке int main(...) { }.
  • Можно еще что-нибудь придумать.
Axifive
  • 1,865
M. Williams
  • 23,562
8

Нужно подключать библиотеку cstdlib, т.к. system объявлена в ней.

#include <cstdlib>
Abyx
  • 31,143
1

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

getchar(), getchar();

Ну и естественно, это дело надо удалить, как только оно перестанет быть нужным.

PS: Если при вводе пользователь перед enter'ом нажмёт пробел, то всё равно не сработает.

Qwertiy
  • 123,725
-1
//попробуй так-действие тожесамое
#include<iostream>
using namespace std;
int main(){
...
cout << "Для продолжения нажмите Enter\n";
cin.get();//можно несколько раз, для верности
return 0;
}
sudo97
  • 1,823
-3

если builder то
#include <iostream.h>

stek29
  • 103
  • что-то не работает замена скобок: #include (iostream.h) вместо () поставьте нормальные скобки. – чипик Oct 30 '11 at 10:54
  • system должна находиться не там. Хотя про билдер не в курсе. – Qwertiy Jan 11 '19 at 23:19
-4
#include <iostream>
using namespace std;

Как же вы товарищ самую стандартную библиотеку iostream -то не попробовали??? Она ещё cin cout и cerr позволяет использовать (может вы не знаете), а глядя на подсказки интеллисенса (он для C++ появился в VS2012) у неё вообще много чего есть (вернее конкретно в std). PS: для новичков: студийную библиотеку надо подключать в коде после не-студийных, а то так и будет писать типа "переменная system не найдена ..." - сами виноваты. Это ведь C++ ёкарный бабай.

-6

попробуй Директиву #include<stdio.h> и вставь system("pause\n");
Для оператора getch(); директива #include <conio.h>!

mymedia
  • 8,602
  • system не должна находиться в stdio.h. Даже не знаю, в VS может такое сработать или нет, но в других - точно нет. – Qwertiy Jan 11 '19 at 23:18
-8

У меня такая проблема решилась вот так

#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
   cout << "После выполнения, вaс ожидает пауза" << endl;

   system("pause");
   return 0;
}

Т.е. нужно добавить входные аргументы для функции main(), а именно

int main(int argc, char **argv)
{
}
  • Это может сработать только в VS, да и то не факт, что во всех версиях. – Qwertiy Jan 11 '19 at 23:17