2013-02-27 80 views
6

我試圖從標準輸入讀取。第一行是我要閱讀的行數。接下來我讀的這幾行將再次打印。這裏是代碼:cin.get()在循環中

#include <iostream> 

using namespace std; 

int main() 
{ 
    int n; 
    cin >> n; 
    for (unsigned int i = 0; i < n; ++i) 
    { 
     char a[10]; 
     cin.get (a, 10); 
     cout << "String: " << a << endl; 
    } 
    return 0; 
} 

當我運行它,並提供行數,程序退出。我還沒有弄清楚發生了什麼,所以我決定在這裏提問。

在此先感謝。

+0

我不認爲它應該像你說的那樣行爲..再次嘗試。 – 2013-02-27 20:51:21

+0

再次嘗試 - 同樣的錯誤 – 2013-02-27 20:59:17

回答

6

混合格式和無格式的輸入是充滿了問題。在您的特定情況下,該行:

std::cin >> n; 

消耗你輸入的號碼,但保留輸入流中的'\n'

隨後,將該行:

cin.get (a, 10); 

不消耗數據(因爲輸入流在'\n'仍指向)。出於同樣的原因,下一次調用也不會消耗數據,依此類推。

然後問題變成「我如何使用'\n'?」有幾個方式:

您可以讀取一個字符,並把它扔掉:

cin.get(); 

你可以閱讀一個整行,無論長短:

std::getline(std::cin, some_string_variable); 

你可以不理會休息當前行:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

作爲一個相關的建議,我從來沒有使用std::istream::get(char*, streamsize)。我總是更喜歡:std::getline(std::istream&, std::string&)

+0

謝謝,那工作 – 2013-02-27 20:58:52

2

cin.get(a, 10)之前添加cin.get()將解決您的問題,因爲它將讀取輸入流中的剩餘端線。

+0

謝謝,這有助於 – 2013-02-27 21:00:30