我知道有关于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);
答案 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