我如何正确使用“getline(cin,input);”

时间:2016-02-07 19:15:27

标签: c++ input storage getline

我正在编写一个程序来转换用户提供的文本。我在测试程序中自己尝试了这种方法,它运行得很好;但是当我尝试将其实现到更大的程序中时,用户无法为程序提供存储输入。相关代码如下:

TimeZone timezone = Arrays.stream(objectArr)
.map(obj -> obj.getName().equals("timeZone") ? timezone = db.getTmezone(obj.getId()) : (obj.getName().equals("calendar") ? calendar = db.getTmezone(obj.getId()) : null)) 

我认为可能是程序在等待用户的另一个输入,所以我添加了一个我认为已经填充的变量,但它没有修复我的解决方案。在我看来,问题出在receiveInput函数中,但我可能错了。提前感谢您的任何帮助。

另外,我正在使用具有正确引用变量的函数原型。

1 个答案:

答案 0 :(得分:0)

我看到两个问题:

1)在调用std::getline()之后,您没有检查EOF条件。

2)您正在将std::getline>>运算符混合在一起。现在,实际上没有任何技术上的错误,但是std::getline>>运算符都有非常细微差别语义,当涉及到错误检查和输入消耗时,你需要100%正确,以便正确使用它们。

只需将>>运算符的使用替换为std::getline,因此您只使用std::getline,并确保检查fail()或{{ 1}}()。您将在stackoverflow.com上找到大量有关如何正确检查文件结束和故障情况的示例,eof

相关问题