当前位置:  开发笔记 > 编程语言 > 正文

在C++中忽略std :: cin上的EOF

如何解决《在C++中忽略std::cin上的EOF》经验,为你挑选了1个好方法。

我有一个实现交互式shell的应用程序,类似于Python控制台/ irb的工作方式.现在的问题是,如果用户意外命中^DEOF,我的getline()调用将返回一个空字符串,我将其视为"无输入"并再次显示提示.

然后,这将导致无限循环打印提示.

现在在Python中我会通过捕获来解决这个问题EOFError,但是在C++中没有引发异常,我可以捕获并且似乎没有设置cin忽略EOF.

任何提示?



1> Johannes Sch..:

如果它无法读取任何内容,它会设置failbit.只需在if条件下测试流,然后清除该位:

if(!getline(std::cin, myline)) {
    std::cin.clear();
    std::cout << "you should enter something" << std::endl;
}

在内部,序列就是这种方式:

在终端上等待一个字符串.终端将阻止,直到用户发出换行符.可能出现两个可能的错误情况

    用户立即按下EOF.这将使任何getline内容都没有读取,它将设置failbiteofbit.

    用户输入内容然后按EOF.这将getline消耗一些东西,然后在尝试获取下一个角色时它会击中EOF.这个原因eofbit要设定.

你会尝试再读一些东西.提取函数将创建一个类型的对象,该对象istream::sentry检查流的状态.如果设置了任何错误位,将导致提取功能立即返回.这导致了无休止的循环.

一个clear()清除所有错误位的调用,你可以继续阅读你的东西.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有