我有一个实现交互式shell的应用程序,类似于Python控制台/ irb的工作方式.现在的问题是,如果用户意外命中^DEOF,我的getline()调用将返回一个空字符串,我将其视为"无输入"并再次显示提示.
然后,这将导致无限循环打印提示.
现在在Python中我会通过捕获来解决这个问题EOFError,但是在C++中没有引发异常,我可以捕获并且似乎没有设置cin忽略EOF.
任何提示?
如果它无法读取任何内容,它会设置failbit.只需在if条件下测试流,然后清除该位:
if(!getline(std::cin, myline)) {
std::cin.clear();
std::cout << "you should enter something" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在内部,序列就是这种方式:
getline内容都没有读取,它将设置failbit和eofbit.getline消耗一些东西,然后在尝试获取下一个角色时它会击中EOF.这个原因eofbit要设定.istream::sentry检查流的状态.如果设置了任何错误位,将导致提取功能立即返回.这导致了无休止的循环.一个clear()清除所有错误位的调用,你可以继续阅读你的东西.
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |