2017-03-08 169 views
-2

我在做一個項目,我必須從終端讀取數據。從終端讀取輸入

所以程序正常啓動,用戶必須提供一些指令。 我希望程序能夠等待用戶給出的指示(在終端上錄音),然後執行所有這些指令。

我只能使用函數read來獲取輸入。 到現在爲止,我發現波紋管

int main (void) 
{ 
    char line[50]; 
    int ret; 

    printf ("\nEnter string below\n"); 
    while ((ret = read(0, line, 50)) != -1) 
    { 
     line[ret] = '\0'; 
     printf ("result %s\n", line); 
    } 
} 

它的工作方式,但我想按ENTER鍵退出輸入模式,並把它們當輸入所有的指令,然後。

可能嗎? 此外,有沒有使用CRTL + d

感謝

+1

'輸入'? :D好。 –

+1

你沒有使用'read'函數,你正在使用'getline'函數。與你的老師或其他人覈實。 –

+1

是的,這是可能的。目前還不清楚如何管理輸入信息或它們所代表的內容,但如果要將它們作爲單個字符串進行管理,則可以使用一組字符串(或者等價地指定一組指向動態分配的字符串緩衝區的字符指針) 。 – lurker

回答

1

退出開關輸入模式,一種常見的方式,我認爲你應該做

while (read(0, line, 50) > 0) 
    printf("%s\n", line); 

但是,如果你這樣做,你如果有麻煩例如,第一個輸入爲42個字符,第二個輸入爲30個,因爲讀取功能不會重置「行」緩衝區。 如果可以使用memset或者使用你自己的函數來做到這一點!

爲什麼> 0而不是!= -1:因爲read返回-1(如果是錯誤),如果它是輸入的結尾則返回0。