2010-06-07 33 views
0

我不知道我在這裏失蹤。這是一個代碼片段,我在一個網站上發現,我把它放在我的程序,看看它是如何工作的,然後我會在以後修改我的胃口。我包括iostream和這個代碼片段是在我的主要功能。獲取用戶輸入使用cin.get()在C++的問題

char buffer[80]; 
cout << "Enter the string: "; 
cin.get(buffer, 79);  // get up to 79 or newline 
cout << "Here's the buffer: " << buffer << endl; 

發生什麼事情是程序從不要求用戶輸入。它似乎打印出兩個cout語句,然後結束。我來自哪裏得到的片段中,網站顯示的輸出:

Enter the string: Hello World 
Here's the buffer: Hello World 
+1

它不應該是'COUT << 「輸入字符串:」 << ENDL;'? – 2010-06-07 20:49:34

+1

爲什麼?這應該不重要 – segfault 2010-06-07 20:52:08

+0

這完全取決於您的UI設計。如果你想在提示符的同一行輸入字符串,那麼不應該。 – Cogwheel 2010-06-07 20:54:52

回答

1

我的建議是忘記這個片段的存在,並期待std::getline代替。你會使用它是這樣的:

#include <string> 
#include <iostream> 

int main() { 
    std::string buffer; 

    std::getline(buffer, std::cin); 
    std::cout << "Here's the buffer: " << buffer; 
    return 0; 
} 

你可以,當然,使用流提取像std::cin >> buffer,但這樣做只會讀取輸入的一個「字」,而不是一整行像你以前的代碼試圖去做。

1

代碼返回不管是輸入緩衝的時間,最有可能一無所獲。

只是爲了檢查在文件中鍵入一些數據,然後運行程序,並添加「< MYFILE」,看看得到的數據在緩存加載。

你需要的,如果你想等待數據做一些控制檯操作。

+0

加1爲實際試圖回答問題,而不是告訴OP「不要那樣做,做別的事!」你實際上試圖回答他所問的問題,這是很棒的海事組織,因爲這與其他海報提倡的不同。該OP正試圖採取在最大一定數量的字符組成,其中沒有答案(如本評論)與除你幫助。 – 2010-06-07 20:57:30

+0

感謝弗洛林。根據你的文章,我想我找出了我想要做的事情。我所要做的就是在cin.get(buffer,79)的行之前添加一個cin.get();這似乎顯示了一切。 – Brundle 2010-06-07 22:07:54

0

要獲得新行分隔字符,你應該使用

cin.get(buffer, 79, '\n');