Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Предварительное значение пользовательского консольного ввода / 3 сообщений из 3, страница 1 из 1
29.11.2018, 14:50
    #39740390
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предварительное значение пользовательского консольного ввода
Добрый день.
Предположим, нужно отредактировать значение переменной str
Код: plaintext
1.
std::string str = "Иванов";


Есть ли средства, позволяющие предварительно задать значение, показать его и позволить пользователю отредактировать это предварительно заданное значение?

Код: plaintext
1.
2.
3.
cout << "Измените значение, если нужно (и нажмите Enter):"
cout << str; // Только не в cout, а в какой-то хитрый буфер, который далее будет доступен при вводе из cin
getline (cin, str) ; // Новое (возможно, измененное) 


?
...
Рейтинг: 0 / 0
29.11.2018, 20:58
    #39740556
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предварительное значение пользовательского консольного ввода
Что-то я не нашел ничего готового. :(
...
Набыдлокодил с помощью WriteConsoleInput().
...
Рейтинг: 0 / 0
29.11.2018, 21:04
    #39740557
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предварительное значение пользовательского консольного ввода
Мало ли, вдруг кто тоже захочет:

Исходник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

void SendInputStr(const string & str) {
	DWORD dummy;
	const auto hstdi = GetStdHandle(STD_INPUT_HANDLE);

	INPUT_RECORD ir;
	ir.EventType = KEY_EVENT;
	ir.Event.KeyEvent.dwControlKeyState = 0;
	ir.Event.KeyEvent.wRepeatCount = 1;
	ir.Event.KeyEvent.wVirtualKeyCode = 0;// Пофиг
	ir.Event.KeyEvent.wVirtualScanCode = 0;// MapVirtualKey(...);

	auto * pWBuf = new wchar_t[str.length() + 1]; // Исходную строку перекодировать в юникод
	MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pWBuf, str.length() + 1);
	pWBuf[str.length()] = 0;
	wstring ws(pWBuf);
	delete[] pWBuf;

	for (auto wch : ws) {
		ir.Event.KeyEvent.uChar.UnicodeChar = wch;

		ir.Event.KeyEvent.bKeyDown = true; // Нажал
		WriteConsoleInput(hstdi, &ir, 1, &dummy);
		ir.Event.KeyEvent.bKeyDown = false; // Отжал
		WriteConsoleInput(hstdi, &ir, 1, &dummy);
	}
}

void pgetline(string & str)
{
	SendInputStr(str);
	getline(cin, str);
	char * pBuff = new char[str.length() + 1];

	pBuff[str.length()] = 0;
	OemToAnsiBuff(str.c_str(), pBuff, str.length());
	str.assign(pBuff);
	delete [] pBuff;
}



int main()
{
	setlocale(LC_ALL, "");

	cout << "Введите ФИО (и нажмите Enter): ";
	string str = "Иванов Иван Иванович";
	pgetline(str); // Выводит старое значение и ждет ввода нового

	cout << str;
}


...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Предварительное значение пользовательского консольного ввода / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]