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

Providing User Feedback via Error Code on EOF (CTRL+D) character in C++ Program

本文关键字:错误代码 用户反馈 字符 程序 C++ EOF CTRL+D 通过      更新时间:2023-10-16

我知道关于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.ef(),但它仍然不起作用。

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