[英]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
,但是更好的做法是,在您之前進行輸入的位置進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.