我正在尝试下面的函数以获得一个文件名,同时允许“ESC”按钮返回。
但出于某种原因,_getch()总是返回1 '\x1',正在打印的是一个笑脸,甚至对于BackSpace也是如此(这很好,但绝对不是我想要的)。
关于如何改进代码的其他见解是非常欢迎的!(我刚读完大学一年级,所以我对编程还是很陌生的)
string& Get_Filename()
{
char ch;
string name;
while (ch = _getch() != 'CR')
{
if (ch == 'ESC')
throw RESTART;
if (ch == 'BS')
{
name.pop_back();
cout << 'BS'; // Also, will this correctly delete or will I need to
} // << '\b' << ' ' << '\b'?
else
{
name += ch;
cout << ch;
}
}
return name;
}发布于 2014-07-30 13:38:12
在这里阅读关于操作符优先的信息:precedence
其中一个问题在排队。
while (ch = _getch() != 'CR')因为!=的优先级高于赋值运算符
你要问的是:
while( ch = (_getch() != 'CR') )从而得到表达式的结果,而不是您想要的字符(即标准§4.7/4中定义的整数转换bool->char为0或1)。
此外:您将返回对局部变量的引用。请确保返回一份附带价值的副本或其他不会超出范围的内容.
最后:_getch()返回从控制台读取的字符,您不能“拦截”特殊的键和弦(例如,Ctrl或Esc)。在这里阅读更多信息:http://msdn.microsoft.com/it-it/library/078sfkak.aspx
https://stackoverflow.com/questions/25038208
复制相似问题