簡體   English   中英

C ++為什么行得通

[英]C++ Why does this work

我正在使用Microsoft Visual Studio 2013

我目前有這個switch語句:

switch (option)
{
        case 1:
            getline(cin, newname);
            cout << "What would you like your new username to be?\nName: ";
            getline(cin, newname);
            name = newname;
            cout << "\nYour username is now '" << name << "' with your balance being $" << balance << "\n";
            options();
            break;
        case 2:
            cout << "\nOpenning cheat menu\n";
            cheats();
            break;
        default:
            cout << "\nExitting to main title...\n";
            title();
            break;
}

您可以忽略案例2和默認案例,僅顯示它們即可知道這些案例有效。 情況2和默認工作正常,但情況1表現怪異。 如案例1所示,我有兩個getline(cin,newname); 您可能會認為我應該只有一個,但是由於某種原因,我需要兩個才能使此代碼正常運行。

如果我只有其中之一,則代碼會跳過用戶應提供的輸入。 如果我有兩個,它可以正常工作。

我問過這個人,他們也不明白,因此:為什么這樣做。

顯然,在cin輸入緩沖區中有剩余的輸入,包括換行符。 當您使用除getline之外的其他輸入操作時,就會發生這種情況。 它們通常不會消耗輸入緩沖區中的所有內容。

除了使用多余的getline還可以使用ignore ,但是更好的做法是,在您之前進行輸入的位置進行操作。

我認為這里已經發布了類似的問題。

您需要使用cin.ignore()或cin.sync()刷新換行符。

第一個電話似乎也放錯了位置...

暫無
暫無

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

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