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

时间:2014-11-03 21:23:13

标签: c++ eof error-code

我知道有关于EOF和CTRL + D的类似问题,但我有一个更具体的问题。我理解它的方式,CTRL + D表示STDIN的结束,由计算机而不是正在运行的应用程序处理。但是,我需要通过(CTRL + D)键入的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;
}

另外,我忘了提到这个代码是一个在循环内运行的函数,所以用户 不断提示,直到他们提供&#34; bye&#34;或读取EOF字符。

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

1 个答案:

答案 0 :(得分:1)

没有&#34; ^ D&#34;传递给应用程序的字符。 shell拦截了&#34; ^ D&#34;字符并关闭流导致应用程序不再注册输入。因此,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