在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();
在节目结束之前