在C ++中使用getline()

我有一个问题,使用getline方法来获取用户types的消息,我正在使用类似于:

string messageVar; cout << "Type your message: "; getline(cin, messageVar); 

然而,它并没有停止获得输出值,这是什么问题?

如果您在cin >> something后面使用getline() ,您需要将换行符从中间的缓冲区中移出。 你可以通过使用cin.ignore()

这将是这样的:

 string messageVar; cout << "Type your message: "; cin.ignore(); getline(cin, messageVar); 

发生这种情况是因为>>操作符在input缓冲区中保留了换行符。 这可能会成为一个问题时,你做无格式input,如getline() ,它读取input,直到find换行符。 发生这种情况,它会立即停止阅读,因为那是在你之前的操作中留下的。

如果你在input中只有一个换行符,就这样做

 std::cin.ignore(); 

将工作正常。 它读取并放弃input中的下一个字符。

但是如果在input中还有其他东西,除了换行符(例如,你只读了一个字,但用户input了两个字),那么你必须做

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

参见例如这个ignore函数的引用 。

为了更安全,在循环中执行上面的第二个select,直到gcount返回零。

 int main(){ .... example with file //input is a file if(input.is_open()){ cin.ignore(1,'\n'); //it ignores everything after new line cin.getline(buffer,255); // save it in buffer input<<buffer; //save it in input(it's a file) input.close(); } } 

我有类似的问题。 一个缺点是用cin.ignore(),你必须再按一次再input1次与程序混淆。

代码是正确的。 问题一定在别的地方。 尝试从std :: getline文档简单的例子。

 main () { std::string name; std::cout << "Please, enter your full name: "; std::getline (std::cin,name); std::cout << "Hello, " << name << "!\n"; return 0; } 

我认为你没有在程序结束之前暂停程序,所以你在inputinpus后输出的内容在屏幕上看不到?

做:

 getchar(); 

在节目结束之前