2011-10-30 69 views
-2

我寫一個程序,讓學生寫一個問題,這個問題(或字符串)存儲在一個變量,任何人都可以請告訴我最好的方式來獲取用戶輸入獲取用戶輸入的C++

感謝爲您的答案和評論

+7

你看過你寫的這些相關問題嗎?您是否看過這個頁面右側的「相關」部分所鏈接的問題? – Mat

+0

是的,我看了一個 – melonQheadQsheep

+0

我可以使用:string str =「」; getline(cin,str,'\ n');這是一個收集輸入和在多線程程序中使用的好方法 – melonQheadQsheep

回答

8

格式化I/O;從寶寶的第一個C++採取:

#include <string> 
#include <iostream> 

int main() 
{ 
    std::string name; 
    std::cout << "Enter your name: "; 
    std::getline(std::cin, name); 
    std::cout << "Thank you, '" << name << "'." << std::endl; 
} 

這還不是很滿意的,因爲很多事情是可以(並因此將)會出問題。這裏有一個稍微防水版本:

int main() 
{ 
    std::string name; 
    int score = 0; 

    std::cout << "Enter your name: "; 

    if (!std::getline(std::cin, name)) { /* I/O error! */ return -1; } 

    if (!name.empty()) { 
    std::cout << "Thank you, '" << name << "', you passed the test." << std::endl; 
    ++score; 
    } else { 
    std::cout << "You fail." << std::endl; 
    --score; 
    } 
} 

使用getline()意味着你可能會讀一個空行,所以這是值得檢查如果結果是空的。例如,檢查讀取操作的正確執行也是很好的,因爲用戶可以將空文件傳送到標準輸入(例如,通常不會假定任何特定情況存在併爲任何事情做好準備)。替代方案是令牌提取,std::cin >> name,它一次只讀取一個單詞,並像其他任何空白一樣對待換行符。

0

使用gets()作爲this示例示例顯示。 它是簡短的,具有最小的錯誤&。

+0

@KerrekSB你爲什麼這麼認爲? –

+1

嗨,我的評論去了哪裏?關於主題,'gets()'是危險的,因爲它完全沒有被檢查,並且它被廣泛的棄用和泄氣。絕對不是應該推薦的東西,在C++環境下更是如此。 –