我在 MSVC++2010 中使用这段代码来实现用户输入循环:
int wmain(int argc, wchar_t* argv[])
{
vector<wstring> arguments;
wstring userinput;
wchar_t userabort;
do
{
wcout << L"Please type param #" << argc++ << L":" << endl;
wcin >> userinput;
arguments.push_back(userinput);
userinput.clear();
wcout << L"Type 'y' to input next param, 'n' to start program:" << endl;
wcin >> userabort;
wcout << L"Userabort: " << userabort << " (" << int(userabort) << ")" << endl;
}
while (userabort == L'y' || userabort == L'Y'
|| userabort == L'j' || userabort == L'J');
return 1;
}
在我的一个项目中,这完美地工作(在调试和发布配置中)。在我的另一个项目中,这段完全相同的代码(也是 wmain
中的唯一代码)表现得很奇怪(在两种配置中也是如此):它不会在“Type 'y'”之后停止等待我的输入输入下一个参数”,而是立即从流中读取换行字符。
我什至尝试过 wcin >> skipws >> userabort;
但结果相同。我根本不知道是什么原因造成的。可能是某些编译器设置或导入文件的结果吗?或者它可能是按 return 将 userinput
wstring 发送到程序的结果?任何帮助表示赞赏。
最佳答案
当未指定“将 wchar_t
视为内置类型”(/Zc:wchar_t
) 选项时,似乎会发生此行为。
转到项目的属性,在配置属性、C/C++、语言下,确保“将 WChar_t 视为内置类型”设置为是。
这是因为当该选项设置为 no 时,wchar_t
变成了 unsigned short
的 typedef
,这意味着您不能再重载在上面。结果,表达式 wcin >> userabort
为 unsigned short
调用了 operator>>
而不是为 wchar_t
,它没有给出正确的结果。
关于c++ - 使用 std::wcin 读取 wchar_t 总是给出 LF (10, 0xA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205529/