gpt4 book ai didi

c++ - 通过 C++ 程序中 EOF (CTRL+D) 字符的错误代码提供用户反馈

转载 作者:行者123 更新时间:2023-11-28 06:36:18 25 4
gpt4 key购买 nike

我知道关于 EOF 和 CTRL+D 也有类似的问题,但我有一个更具体的问题。按照我的理解,CTRL+D 表示 STDIN 结束,由计算机处理,而不是正在运行的应用程序。但是,我需要就通过 (CTRL+D) 键入的 EOF 字符或包含在包含命令的输入文件中的 EOF 字符向我的程序用户提供反馈。我该怎么做?

我已经包含了我的简单代码,说明了我的想法,但由于显而易见的原因它不起作用:

#include <iostream>
#include <string>
using namespace std;

int input()
{
string cmdstring;
cin >> cmdstring;
if (cmdstring == "bye") //Exit on "bye" command
{
return 1;
}
else if (cmdstring == "^D") //Exit on EOF character CTRL+D
{
return 2;
}
else //Continue shell prompt
{
return 0;
}
}

我正在尝试编写自己的 shell,并且我想在 shell 退出时提供退出状态。非常感谢!

编辑:我改成了cin.eof(),还是不行。

else if (cin.eof()) //Exit on EOF character CTRL+D
{
return 2;
}

另外,我忘了说这段代码是一个在循环中运行的函数,所以用户不断提示,直到他们提供“再见”或读取 EOF 字符。

int exitstatus = 0; //Tracks exit code status
do {
exitstatus = input();
} while (exitstatus == 0);

最佳答案

没有“^D”字符传递给应用程序。 shell 拦截“^D”字符并关闭导致应用程序不再注册输入的流。因此,I/O 系统在 stdin 上设置了 EOF 状态。

这段代码对我有用:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string cmdstring;

cin >> cmdstring;

if(cmdstring == "bye") //Exit on "bye" command
{
return 1;
}
else if(cmdstring == "^D") //Exit on EOF character CTRL+D
{
return 2;
}
else if(cin.eof()) // pressing Ctrl-D should trigger this
{
return 3;
}
return 0;
}

Ctrl-D 应该返回错误代码 3

关于c++ - 通过 C++ 程序中 EOF (CTRL+D) 字符的错误代码提供用户反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723446/

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