2013-05-08 27 views
0

我有一個循環,我想在第一個cin的輸入鍵命中時退出,但我無法讓程序正常工作。目前,我有:測試用戶是否按下Enter鍵(同時仍在測試良好的輸入)

while(running) { 
    cout << "enter word: "; 
    getline(cin,starting); 
    if(ladder.validWord(starting)) 
     running = false; 
    else if(starting.empty()) 
     return 0; 
    else 
     cout << "invalid word...\n"; 
} 

我需要提取良好的輸入,同時還爲輸入鍵擊測試。目前,這仍然退出程序,並給了我一些奇怪的混亂(在程序結束時),這似乎是從我的目錄砍在命令行上,如:

[email protected]:~/folder/ComputerProgramming/Wor$ dLadder 

感謝您的幫助!

回答

1

getline是你的測試。只有當有人點擊輸入時,getline纔會返回。

// extract to string 
#include <iostream> 
#include <string> 
#include <cstdlib> 

std::string getInput(std::string prompt){ 

    std::string name; 

    std::cout << prompt; 
    std::getline (std::cin,name); 
    if (name == "") 
     exit(1); 

    return name; 
} 
main() 
{ 
    std::string name; 
    while (name != "poo"){ 

     name = getInput("enter someting good:\n"); 
    } 

    std::cout << "Hello, " << name << "!\n"; 


    return 0; 
} 
+0

能否詳細說明一下?所以這可以放在一個條件語句?編輯:好吧,謝謝getline使用的更正。但是,這似乎並沒有幫助我,我仍然需要一種方法來測試和返回時輸入被擊中,同時仍然抓住輸入,我不會引用你所得到的。 – 2013-05-08 02:16:35

+0

當然,getline可能是測試的一部分。我會編輯我的例子,包括一個測試 – regretoverflow 2013-05-08 02:18:37

+0

Matrin,'cin >>'也阻塞,直到輸入被按下,我得到那部分,但我不知道如何隔離只進入正常輸入按下的條件。準確地說是 – 2013-05-08 02:22:04

0

我不知道這是否會對您有所幫助,但您至少可以將其用作您的問題的可能解決方案。當我希望我的程序等待用戶擊中輸入這是我通常做的:

cout << "Press <enter> to continue..."; 

// this ignore statement will wait until the user presses <enter>  
cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

我希望它有幫助。