Получать ввод с терминала во время выполнения программы на C ++

В терминале GNOME и XTerm в Ubuntu я сталкиваюсь с этой проблемой: я вынужден вводить значения для всех операторов cin, независимо от того, где они появляются в исходном коде, и только в конце выполняются все операторы cout. Например:

int main()
{
    int a;
    cout<<"Enter a :";
    cin>>a;
    cout<<"\n";
    return 0;
}

Когда я запускаю этот код (используя g ++), я вынужден ввести значение для a перед запуском первого оператора cout.

kanishk509@kanishk509-hp:~/Hackerearth$ g++ -Wall -o sample sample.cpp kanishk509@kanishk509-hp:~/Hackerearth$ ./sample 5 Enter a :

изображение

«5» - это входные данные, которые я вынужден передать оператору cin>>a перед запуском любого оператора cout.


person Kanishk    schedule 02.07.2017    source источник
comment
Мне нужно ввести значение для a до запуска первого оператора cout ... - Звучит правильно. В чем проблема?   -  person jww    schedule 02.07.2017
comment
Вы можете изменить код?   -  person Code-Apprentice    schedule 02.07.2017
comment
@jww Проблема в том, что я хочу, чтобы сначала выполнялся оператор cout, а затем вводилось значение для.   -  person Kanishk    schedule 02.07.2017
comment
@ Code-Apprentice Да, конечно. Это всего лишь образец, который я написал, чтобы продемонстрировать проблему.   -  person Kanishk    schedule 02.07.2017
comment
Поскольку у вас есть полный контроль над кодом, просто выполните сначала cin.   -  person Code-Apprentice    schedule 02.07.2017
comment
@ Code-Apprentice Так что, если мне нужно напечатать приглашение, прежде чем вводить данные, например: Введите:?   -  person Kanishk    schedule 02.07.2017
comment
@Kanishk Тогда сделай это! Вы не можете получить и то, и другое.   -  person Code-Apprentice    schedule 02.07.2017
comment
Я считаю, что вы упустили некоторые важные детали того, чем вы действительно хотите заниматься. Это для школьного задания?   -  person Code-Apprentice    schedule 02.07.2017
comment
@ Code-Apprentice Нет, это не для школьного задания и не для какой-то конкретной программы, которую я хочу написать. Я только что перешел на Linux из Windows и хочу знать, как заставить операторы cin и cout запускаться в том порядке, в котором они появляются в коде. Это мой первый вопрос, и я был бы признателен, если бы вы указали, какие детали я должен добавить к этому вопросу.   -  person Kanishk    schedule 02.07.2017
comment
@ Code-Apprentice Тогда сделайте это! Я пытаюсь это сделать, посмотрите на изображение, приглашение печатается ПОСЛЕ ввода данных в оператор cin (который появляется после оператора cout в код)   -  person Kanishk    schedule 02.07.2017
comment
хм ... Я не понял. По какой-то причине я подумал, что вы хотели, чтобы после ввода появлялось приглашение ...   -  person Code-Apprentice    schedule 02.07.2017
comment
@jww Я думаю, у нас обоих были похожие недоразумения. Вывод, показанный на снимке экрана , является проблемой, потому что приглашение должно появиться перед строкой, которая принимает ввод. (Я предполагаю, что 5 - это вход.)   -  person Code-Apprentice    schedule 02.07.2017
comment
@ Code-Apprentice Да, я должен предоставить входные данные для всех cins перед запуском любого cout.   -  person Kanishk    schedule 02.07.2017
comment
@Kanishk как вы компилируете и запускаете свой код?   -  person Code-Apprentice    schedule 02.07.2017
comment
@Kanishk, когда вы говорите, что я должен ... Я думал, вы имели в виду, что это то, чего вы хотите из-за требований проблемы, которую вы пытаетесь решить. Вместо этого вы описываете, что на самом деле происходит при запуске вашей программы. Возможно, вы захотите отредактировать свой вопрос, чтобы прояснить его.   -  person Code-Apprentice    schedule 02.07.2017
comment
@ Code-Apprentice Использование командной строки: g++ -Wall -o sample sample.cpp   -  person Kanishk    schedule 02.07.2017
comment
Тогда как его запустить? С ./sample? На вашем скриншоте этого нет. Поскольку вы выполняете командную строку, вы можете скопировать и вставить пример выполнения так же, как и фактический код.   -  person Code-Apprentice    schedule 02.07.2017
comment
Возможный дубликат c ++ force std :: cout flush (печать на экран)   -  person Thomas Dickey    schedule 02.07.2017
comment
@ThomasDickey Решено! Спасибо. Следует ли мне удалить этот вопрос, поскольку он может быть дубликатом, или опубликовать ответ самостоятельно?   -  person Kanishk    schedule 02.07.2017


Ответы (1)


Использование std::flush решило проблему.

int main()
{
    int a;
    cout<<"Enter a :"<<flush;
    cin>>a;
    cout<<"\n";
    return 0;
}



kanishk509@kanishk509-hp:~/Hackerearth$ g++ -Wall -o sample sample.cpp
kanishk509@kanishk509-hp:~/Hackerearth$ ./sample
Enter a :5
person Kanishk    schedule 02.07.2017