getline () не останавливает консоль для получения ввода - PullRequest
0 голосов
/ 21 января 2020

Код

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;
static string header = "CWUshell";
static int result = 0;
static string input = "S";
int main() {
    bool cont = true;
    while (cont) {
        cout << "<" + header + ">";
        cin.clear();
        cin.sync();
        getline(std::cin, input, '\n');
        if (input == "exit") {
            cont = false;
        } else {
            result = system(input.c_str());
            if (result != 0) {
                cout << "Command " << input << " not recognized" << endl;
            }
        }
    }
    return 0;
}

Проблема:

При запуске в моей консоли Eclipse IDE код работает так, как мне хотелось бы to:

<CWUshell>dir
Debug  src
<CWUshell>ls
Debug  src
<CWUshell>exit

При запуске в контейнере Ubuntu docker я получаю следующий вывод (он продолжается вечно):

<CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell><CWUshell>

Я пытался использовать cin.ignore () ( вместо cin.clear () и cin.syn c ()), system («пауза»), system («PAUSE»), system («read») и множество других способов попробовать Если система приостановит прием ввода, но безуспешно, консоль Ubuntu не будет ждать ввода и просто выполнит команду l oop. Как решить эту проблему, как я могу заставить консоль ubuntu 18.04 приостанавливать и ждать ввода пользователя?

Docker Файл сборки

На всякий случай помогает моему docker файлу сборки получить образ ubuntu 18.04, в котором уже есть необходимые инструменты для компиляции и запуска c ++, вставить в него мой файл c ++, затем скомпилировать и выполнить этот файл.

FROM szilardvajda/ubuntu_cs470
MAINTAINER Wyatt Rose

COPY application /application
WORKDIR /application/
RUN g++ -o Application cwushell.cpp

CMD ["./Application"]
...