Получение ввода без перевода строки - PullRequest
1 голос
/ 17 июня 2011

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

Это хитрость: я хочу, чтобы консоль не вводила новую строку, когда пользователь нажимает ввод. Вместо этого я хочу просто вставить символ табуляции. Это возможно?

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Установить позицию курсора обратно на предыдущую строку. В Windows вы можете использовать SetConsoleCursorPosition().

1 голос
/ 17 июня 2011

Да, это возможно. Вам нужно будет использовать библиотеку консоли / терминала, однако. Ncurses для * nix, wincon (часть Windows API; вы можете просто #include windows.h использовать его) ... Есть много вариантов.

Фактический алгоритм будет просто проверять символы, которые отправляются как ключевые события / используя эквиваленты getkey () различных библиотек, выводить введенные символы в консоль, если нажатая клавиша не является ENTER, но все равно вызывает символ вывод на экран (т. е. функциональные клавиши, блокировка заглавных букв, сдвиг и т. д. не вызовет отклика на консоли или в окне терминала) и последующий вывод \t, если нажатая клавиша действительно ENTER.

0 голосов
/ 17 июня 2011

Это не совсем то, что вам нужно, но вы можете получить тот же эффект, используя getline, чтобы получить все входные данные строки в одной строке, а затем используйте std::stringstream для анализа значений.

 std::string row;
 getline(cin,row);
 std::stringstream ss(row);
 int j=0,i=currentrow;  //put this in a loop over your rows
 int input; //or float, double, whatever
 while(ss >> input)
 {
      mat[i][j] = input;
      j++;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...