gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:38:31 29 4
gpt4 key购买 nike

我有一个实现交互式 shell 的应用程序,类似于 Python 控制台/irb 的工作方式。现在的问题是,如果用户不小心点击了 ^D EOF,我的 getline() 调用返回一个空字符串,我将其视为“无输入”并显示再次提示。

这会导致打印提示的无限循环。

现在在 Python 中,我会通过捕捉 EOFError 来解决这个问题,但在 C++ 中,我不会捕捉到任何异常,而且 cin 上似乎没有设置> 忽略 EOF。

有什么提示吗?

最佳答案

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

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

在内部,您的情况是这样的:

  • 在终端上等待字符串。终端将阻塞,直到用户发出换行符。两种可能的错误情况
    1. 用户立即按下 EOF。这将使 getline 根本不读取任何内容,并将设置 failbiteofbit
    2. 用户输入内容然后按下 EOF。这将使 getline 消耗一些东西,然后在尝试获取下一个字符时遇到 EOF。这会导致 eofbit 被设置。
  • 您将尝试再次阅读一些内容。提取函数将创建一个 istream::sentry 类型的对象,它检查流的状态。如果设置了任何错误位,将导致提取函数立即返回。导致之前死循环。

调用 clear() 会清除所有错误位,您可以继续阅读您的资料。

关于c++ - 在 C++ 中忽略 std::cin 上的 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674413/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com