2010-06-07 108 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');