Предоставление обратной связи с пользователем через код ошибки на символе EOF (CTRL + D) в программе C ++

Я знаю, что есть похожие вопросы о EOF и CTRL + D, но у меня есть более конкретный вопрос. Насколько я понимаю, CTRL + D сигнализирует об окончании STDIN и обрабатывается компьютером, а не запущенным приложением. Тем не менее, мне нужно предоставить отзыв пользователю моей программы о символе EOF, набранном с помощью (CTRL + D) или содержащемся во входном файле, содержащем команды. Как бы я это сделал?

Я включил свой простой код о том, как я думал это сделать, но он не работает по понятным причинам:

#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;
}
}

Я пытаюсь написать свою собственную оболочку и хочу предоставить статус выхода при выходе из оболочки. Большое спасибо!

Редактировать:
Я изменил его на 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);

0

Решение

В приложение не передан символ «^ D». Оболочка перехватывает символ «^ D» и закрывает поток, в результате чего приложение больше не регистрирует ввод. В результате этого I/O система устанавливает состояние 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

1

Другие решения


По вопросам рекламы [email protected]