2013-07-26 476 views
0

有沒有什麼辦法可以讓用戶只按下回車鍵而不需要輸入任何輸入並繼續執行程序std::cin?謝謝!允許用戶跳過輸入輸入,只需按Enter鍵

_tprintf(_T("\nENTER CHOICE: ")); 
cin>>ch; 
cin.ignore(); 

當我運行這個代碼段的程序,沒準什麼時候我真的不希望在該字段中輸入任何東西,當我按下回車鍵,光標只會產生新的生產線。

+0

@AlexandruBarbarosie不標準。 – Rapptz

+0

'std :: cin.get()' – 0x499602D2

+0

發佈示例程序,以便我可以更清楚地理解。 – 0x499602D2

回答

0

如果我正確理解你的問題,你可以簡單地檢查輸入是否等於"";如果沒有,請不要繼續執行所要求的操作。

編輯:哦,現在你編輯你的問題我想出你想要什麼。只需使用cin.ignore();即可。在此之前,你不需要任何東西cin >>

1

如果您「讀入」std::noskipws,則讀取將停止跳過空白。這意味着當你閱讀單個字符時,你可以閱讀空格和換行符等。

#include <iostream> 
#include <iomanip> 

int main() { 
    std::cin >> std::noskipws; //here's the magic 
    char input; 
    while(std::cin >> input) { 
     std::cout << ">" << input << '\n'; 
    } 
} 

當輸入運行:

a 

b 

c 

生產:

>a 
> 

> 

>b 
> 

> 

>c 

所以我們可以看到,它在信中a讀,然後換行回車鍵後,再空行,然後字母b

如果你想使用r在輸入數字後點擊回車鍵,你必須在你的代碼中處理。

如果用戶只需輸入每行一個「東西」,實際上是一個更簡單的方法:

#include <iostream> 

int main() { 
    std::string line; 
    while(std::getline(std::cin, line)) { 
     std::cout << line << '\n'; 
    } 
} 

這將讀取輸入的字符,直到該行的結尾,讓您閱讀線與空間,或線路什麼也沒有。請注意,在使用std::cin >>之後,它通常會將換行符保留在輸入中,所以如果您在std::getline之後立即返回空字符串。爲避免這種情況,在嘗試使用std::getline之前,可以使用std::cin.ignore(1, '\n')使其忽略換行符。

0

不,您不能使用cin來做到這一點。

如果按ENTER鍵當程序等待輸入,cin會完全忽略換行(就像它忽略由於skipws空格),存儲輸入流中的換行字符,並保持要求的輸入。除非它收到相關類型的有效輸入或遇到EOF,否則它會一直要求輸入。

改爲使用getline函數。

#include <string> 
... 
cout << "Enter Something\n"; 
string a; 
getline(cin, a);