Подтвердить что ты не робот

С++ - открыть консольное окно?

Мой вопрос супер простой, но я перехожу из С# в С++, и мне было интересно, какая команда держит консольное окно открытым в С++?

Я знаю в С#, самый простой способ:

Console.ReadLine();

Или, если вы хотите, чтобы пользователь нажал любую клавишу, его:

Console.ReadKey(true);

Как вы это делаете на С++? Единственная причина, по которой я задаю этот простой вопрос, заключается в том, что я не смог найти хороший и ясный ответ в Интернете.

4b9b3361

Ответ 1

Как насчет std::cin.get();?

Кроме того, если вы используете Visual Studio, вы можете запускать без отладки (по умолчанию CTRL-F5), и он не будет закрывать консоль в конце. Если вы запустите его с помощью отладки, вы всегда можете поставить точку останова в закрывающей скобке main().

Ответ 2

Правильный путь

cin.get();

cin.get() является совместимым с С++ и переносимым. Он будет извлекать следующий символ из стандартного ввода (stdin). Пользователь может нажать "Enter", и ваша программа продолжит выполнение или завершится в нашем случае.

Microsoft принимает

Microsoft имеет статью базы знаний под названием Предотвращение исчезновения окна консоли. В нем описывается, как приостанавливать выполнение только при необходимости, то есть только тогда, когда пользователь породил новое окно консоли, выполнив программу из проводника. Код находится в C, который я воспроизвел здесь:

#include <windows.h>
#include <stdio.h>
#include <conio.h>

CONSOLE_SCREEN_BUFFER_INFO csbi;
HANDLE hStdOutput;
BOOL bUsePause;

void main(void)
{
        hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
        if (!GetConsoleScreenBufferInfo(hStdOutput, &csbi))
        {
                printf("GetConsoleScreenBufferInfo failed: %d\n", GetLastError());
                return;
        }

        // if cursor position is (0,0) then use pause
        bUsePause = ((!csbi.dwCursorPosition.X) &&
                     (!csbi.dwCursorPosition.Y));

        printf("Interesting information to read.\n");
        printf("More interesting information to read.\n");

        // only pause if running in separate console window.
        if (bUsePause)
        {
                int ch;
                printf("\n\tPress any key to exit...\n");
                ch = getch();
        }
}

Я использовал это сам, и это хороший способ сделать это, только под окнами. Обратите внимание, что вы можете достичь этого не программно под окнами, запустив свою программу с помощью этой команды:

cmd /K consoleapp.exe

Неверный путь

Не используйте для этого следующее:

system("PAUSE");

Это приведет к выполнению команды windows "пауза", создав новый процесс cmd.exe/command.com в вашей программе. Это совершенно ненужно, а также не переносится, поскольку команда pause является специфичной для Windows. К сожалению, я видел это много.

getch();

Это не является частью стандартной библиотеки C/С++. Это просто расширение компилятора, и некоторые компиляторы его не поддержат.

Ответ 3

Если ваша проблема заключается в сохранении окна консоли в Visual Studio без изменение вашего приложения (c-code) и запускают его с помощью Ctrl + F5 (при выполнении Ctrl + F5), но окно все еще закрывается главный намек - установить параметр компоновщика /SUBSYSTEM: CONSOLE в вашем проекте Visual Studio.

как объясняется DJMooreTX в http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6

1) Откройте проект и перейдите в Обозреватель решений. Если вы будете сопровождать меня в K & R, ваше "решение" будет "привет" с 1 проектом под ним, а также "привет" выделено жирным шрифтом.

  1. Щелкните правой кнопкой мыши по "привет" (или независимо от имени вашего проекта.)

  2. Выберите "Свойства" в контекстном меню.

  3. Выберите "Свойства конфигурации" > "Компоновщик" > "Система".

  4. Для свойства "Подсистема" в правой панели щелкните раскрывающийся список в правой колонке.

  5. Выберите "Консоль (/SUBSYSTEM: CONSOLE)"

  6. Нажмите "Применить" , дождитесь, пока он закончит выполнение того, что он делает, затем нажмите "ОК". (Если "Применить" выделено серым цветом, выберите другую опцию подсистемы, нажмите "Применить" , затем вернитесь и примените консольную опцию. Мой опыт в том, что ОК сам по себе не будет работать.)

Теперь сделайте Boris CTRL-F5, дождитесь, когда ваша программа будет компилировать и связать, найти консольное окно под всем другим нежелательным файлом на вашем рабочем столе и прочитать ваш выпуск программы, а затем любимый "Нажмите любую клавишу, чтобы продолжить....".

Опять же, CTRL-F5 и подсказки подсистемы работают вместе; они не являются отдельными опциями.

Ответ 4

Более подходящим способом является использование std::cin.ignore:

#include <iostream>

void Pause()
{
   std::cout << "Press Enter to continue...";
   std::cout.flush();
   std::cin.ignore(10000, '\n');
   return;
}

Ответ 5

Вы также можете немного опираться на IDE. Если вы запустите программу, используя команду "Начать без отладки" (Ctrl + F5 для меня), консольное окно останется открытым даже после завершения программы "Нажмите любую клавишу, чтобы продолжить...". сообщение.

Конечно, если вы хотите использовать "Хит любой ключ", чтобы поддерживать вашу программу (т.е. поддерживать поток в живом режиме), это не сработает. И это не работает, когда вы запускаете "с отладкой". Но тогда вы можете использовать точки останова, чтобы открыть окно.

Ответ 6

В окнах вы можете использовать _getch() в

<conio.h>

заголовок.

Ответ 7

если вы создадите консольное приложение, консоль останется открытой до закрытия приложения.

Если вы уже создали приложение, и вы не знаете, как открыть консоль, вы можете изменить подсистему как Консоль (/Подсистема: Консоль) в конфигурациях проекта → компоновщик → .

Ответ 8

Примерно такие же вещи, которые вы делали на С#. Вызов getch(), вероятно, самый простой.

Ответ 9

Я использую std::getwchar() в своей среде, которая связана с компилятором mingw32-gcc-4.6.2. Вот пример кода.

#include <iostream>
#include "Arithmetics.h"

using namespace std;

int main() {
    ARITHMETICS_H::testPriorities();

    cout << "Press any key to exit." << endl;
    getwchar();
    return 0;
}

Ответ 10

Как говорит Томас, игнорирование cin - хороший способ. Чтобы всегда ждать, пока пользователь нажимает кнопку ввода (даже если выход используется), зарегистрируйте функцию atexit:

#include <iostream>

void pause()
{   ::std::cout<<"\nPress ENTER to exit.";
    ::std::cin.sync();
    if(::std::cin.get()!='\n')
        ::std::cin.ignore(0xFFFFFFFF,'\n');
}

int main()
{
    atexit(pause);

    // whatever

    return 0;
}

Ответ 11

В первую очередь, чтобы включить функции С++, вы должны использовать

включить <iostream.h> вместо stdio.h

and to hold the output screen there is a simple command getch();
here, is an example:
   #include<iostream.h>
   #include<conio.h>
   void main()  \\or int main(); if you want
  {
    cout<<"c# is more advanced than c++";
    getch();
  }

Благодарю вас