_getch返回笑脸

_getch returns smiley faces

本文关键字:笑脸 返回 getch      更新时间:2023-10-16

我正在尝试下面的函数来获得一个文件名,同时允许'ESC'键返回

但由于某种原因_getch()总是返回[1 'x1'],并且打印的是笑脸,甚至对于退格(这很好,但绝对不是我想要发生的)。

    这是怎么回事?

其他关于如何改进代码的见解非常受欢迎!(我刚读完大学一年级,所以对编程还是个新手)

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;
}

查看操作符优先级:http://en.cppreference.com/w/cpp/language/operator_precedence

其中一个问题在

这一行
while (ch = _getch() != 'CR')

,因为!=的优先级高于赋值操作符

你实际上问的是:

while( ch = (_getch() != 'CR') )

,从而获得表达式的结果而不是您想要的字符(这是整型转换 bool->char在标准§4.7/4中定义为0或1)

更进一步:你返回了一个对局部变量的引用。确保返回一个按值的副本或者其他不在作用域之外的东西。

最后:_getch()返回从控制台读取的字符,您不能"拦截"特殊键(例如Ctrl-D或Esc)。阅读更多:http://msdn.microsoft.com/it-it/library/078sfkak.aspx