2014-11-03 25 views
0

我知道有關於EOF和CTRL + D的類似問題,但我有一個更具體的問題。按照我的理解,CTRL + D表示STDIN的結束,由計算機處理,而不是正在運行的應用程序。但是,我需要通過(CTRL + D)輸入的EOF字符或包含命令的輸入文件中包含的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; 
    } 
} 

我試圖寫我自己的殼,我想提供shell退出時的退出狀態。非常感謝你!

編輯: 我將其更改爲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

我會想'如果(cin.eof())'應該這樣做。 – Galik 2014-11-03 21:24:33

+0

我不知道!然而,它似乎並不可悲,它似乎沒有抓住EOF字符,但它在我的終端中放置了一個「^ D」字符,所以這就是爲什麼我最初是這樣做的。 – mallux 2014-11-03 21:32:39

+0

沒有「^ D」字符。 shell攔截「^ D」字符,並將「stdin」上的EOF狀態設置爲結果。 – Galik 2014-11-03 21:49:56

回答

1

傳遞給應用程序沒有「^ 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

相關問題