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


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

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


?
...
Рейтинг: 0 / 0
Предварительное значение пользовательского консольного ввода
    #39740556
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не нашел ничего готового. :(
...
Набыдлокодил с помощью WriteConsoleInput().
...
Рейтинг: 0 / 0
Предварительное значение пользовательского консольного ввода
    #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
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Предварительное значение пользовательского консольного ввода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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