2014-11-03 8 views
0

EOF 및 CTRL + D에 대해 비슷한 질문이 있지만 더 구체적인 질문이 있습니다. 내가 이해하는 방식으로 CTRL + D는 STDIN의 끝을 알리고 실행중인 응용 프로그램이 아니라 컴퓨터에서 처리합니다. 그러나 (Ctrl + D)를 통해 입력되었거나 명령이 포함 된 입력 파일 내에 포함 된 EOF 문자에 대한 내 프로그램 사용자에게 피드백을 제공해야합니다. 어떻게하면 좋을까요?C++ 프로그램의 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

를 반환해야합니다. – Galik

+0

나는 그것에 대해 몰랐다! 그러나 슬프게도 작동하지 않는 것 같습니다. 그것은 EOF 문자를 잡는 것처럼 보이지 않지만 터미널에 "^ D"문자를 배치하므로 처음에는 그 문자를 좋아했습니다. – mallux

+0

"^ D"문자가 없습니다. 쉘은 "^ D"문자를 가로 채고 결과로'stdin'에 EOF 상태를 설정합니다. – Galik

답변

1

"^ D"문자는 응용 프로그램에 전달되지 않습니다. 쉘은 "^ D"문자를 가로 채고 스트림을 닫아 응용 프로그램이 입력을 더 이상 등록하지 않게합니다. 그 결과 I/O 시스템은 EOF 상태를 stdin으로 설정합니다.

이 코드는 나를 위해 작동 :

#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을 누르면 나는 경우 (cin.eof는())`를해야한다`생각 에러 코드 3