перевод строки с пользовательского ввода без нажатия Enter - PullRequest
2 голосов
/ 28 мая 2019

Прежде всего, я должен отметить, что нашел несколько тесно связанных вопросов. Например, здесь и здесь . Однако я не хочу использовать printf и не хочу использовать \n (поскольку я уже знаю, что он не работает).

Возможно ли пользователю ввести новую строку, возможно, escape-последовательность, не нажимая enter?

Как пример:

#include <iostream>
#include <string>

int main () {
    std::string a,b;
    std::cin >> a;
    std::cin >> b;
    std::cout << a << "\n" << b;
}

Может ли пользователь предоставить одну строку ввода

hello ??? world 

такой, что выше печатает

hello
world

Ответы [ 2 ]

1 голос
/ 28 мая 2019

(я предполагаю, что вы не хотите, чтобы пробелы разделяли строки. Например,

Foo bar ??? baz qux

должно быть две строки.)

Невозможно настроить потоки так, чтобы ??? автоматически преобразовывался в символ новой строки. Чтобы пользователь мог ввести символ новой строки, он должен ввести символ новой строки, а не что-либо еще.

Вы должны разобрать это самостоятельно. Вот пример парсера, который обрабатывает ??? как разделитель:

void read_string(std::istream& is, std::string& dest)
{
  std::string str = "";
  for (char c; is.get(c);) {
    switch (c) {
    case '?':
      if (is.get(c) && c == '?') {
        if (is.get(c) && c == '?') {
          dest = str;
          return;
        } else {
          str += "??";
        }
      } else {
        str += "?";
      }
    default:
      str += c;
    }
  }
}

Например, ввод

? is still one question mark????? is still two question marks???

разбирается на две строки:

? is still one question mark
?? is still two question marks

живая демоверсия

1 голос
/ 28 мая 2019

Вы можете сделать это

std :: string a, b;
std :: cin >> a >> b;
std :: cout << a << "\ n" << b; </p>

Пользователь может вводить данные с пробелом.

...