簡體   English   中英

_getch返回笑臉

[英]_getch returns smiley faces

我正在嘗試下面的功能以獲取文件名,同時允許按“ 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;
}

在此處閱讀有關運算符優先級的信息: http : //en.cppreference.com/w/cpp/language/operator_precedence

問題之一是生產線

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

因為!=比賦值運算符具有更高的優先級

您實際上要問的是:

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

從而獲得表達式的結果,而不是所需的字符(這是標准§4.7/ 4中定義為0或1的整數轉換 bool-> char)

此外:您正在返回對局部變量的引用。 確保返回按值復制或沒有超出范圍的內容。

最后: _getch()返回從控制台讀取的字符,您不能“攔截”特殊的和弦(例如Ctrl-D或Esc)。 在此處閱讀更多信息: http : //msdn.microsoft.com/it-it/library/078sfkak.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM