C++ Win32 API控制台光标在WriteConsole之后不移动

C++ Win32 API控制台光标在WriteConsole之后不移动,c++,c++11,winapi,C++,C++11,Winapi,因此,当我尝试使用以下代码从控制台读取std::wstring时 std::wstring string; wchar_t c; DWORD u; do { ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &u, NULL); } while (u && (c == L' ' || c == L'\n')); do { string.append(1, c); ReadConsole(G

因此,当我尝试使用以下代码从控制台读取std::wstring时

std::wstring string;
wchar_t c;
DWORD u;
do {
    ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &u, NULL);
} while (u && (c == L' ' || c == L'\n'));
do {
    string.append(1, c);
    ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &u, NULL);
} while (u && c != L' ' && c != L'\n');

WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), string.data(), string.length(), &u, NULL);
写入字符串后,光标位置不会移动,因此如果再次调用WriteConsole(),它将写入刚刚写入的字符串上方。
有什么解决方法吗?

ReadConsole
读取stdin时,它会将
\r\n
附加到字符串中。您只在条件中排除了
\n
<代码>“字符串\r”将被传递到
WriteConsole
,而
\r
将光标返回到行首。 请尝试以下代码:

#include <windows.h>
#include <iostream>
#include <string>
int main(int argc, char** argv)
{
    std::wstring string;
    wchar_t c;
    DWORD u;
    do {
        ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &u, NULL);
    } while (u && (c == L' ' || c == L'\n'));
    do {
        string.append(1, c);
        ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &c, 1, &u, NULL);
    } while (u && c != L' ' && c != L'\n' && c != L'\r');

    WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), string.data(), string.length(), &u, NULL);
    return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
std::wstring字符串;
wchar_t c;
德沃德·u;
做{
ReadConsoleW(GetStdHandle(标准输入句柄),&c,1,&u,NULL);
}而(u&(c==L'| | c==L'\n');
做{
追加(1,c);
ReadConsoleW(GetStdHandle(标准输入句柄),&c,1,&u,NULL);
}而(u&&c!=L'&&c!=L'\n'&&c!=L'\r');
WriteConsoleW(GetStdHandle(STD_输出_句柄),string.data(),string.length(),&u,NULL);
返回0;
}

为什么要使用
ReadConsole()
而不是
std::cin>>字符串?为什么要使用
WriteConsole()
而不是
std::cout?您所描述的并不是文档化的工作方式:“WriteConsole函数在当前光标位置将字符写入控制台屏幕缓冲区。当写入字符时,光标位置向前移动。StCySoCurrurSurvivSturn设置当前光标位置。“我正在编写WiAPI控制台函数的包装器,我不想使用C++ I/O。是的,问题是光标没有前进。这是因为在代码<字符串String。
\r
结尾您好,@Mattia Gregnanin这能解决您的问题吗?如果您有任何问题,请随时告诉我