2012-01-29 138 views
0

我的問題在OOP語言中很簡單,但在C語言中並不那麼簡單。 當用戶在控制檯中輸入一些文本數據時,我們爲示例ESC設置了終止字符(文本數據是多行的,我們不知道什麼時候結束)。終止文本字符

所以我的問題是如何讀取從控制檯,如果用戶按ESC鍵文本打破,我們讀到的文本數據的循環?

下面是一些代碼:

printf("Enter the source here(press ESC) : \n"); 
char buffer[1000][1000]; 
int counter = 0; 
while(1) 
{ 
    if (fgets(buffer[counter],sizeof(buffer[counter]),stdin)) 
    { 
     counter++; 
    } 

} 
+0

商店的'fgets'函數的結果,然後使用條件語句來檢查轉義字符。 – 2012-01-29 11:33:07

+0

@Cody - 這將不起作用,OP希望它在ESC按下時立即終止 – 2012-01-29 11:37:43

+0

爲什麼它「在OOP語言中很簡單」。 OOP與它有什麼關係?用什麼神奇的方式來做這件事,比如C++,它與你在C中的做法有着根本的區別? – jamesdlin 2012-01-29 13:18:56

回答

1

我覺得閱讀多行文本的正確方法是用一個EOF字符終止輸入。在Windows中,我認爲它是ctrl + Z(我不確定),在類似unix的系統上,它是ctrl + D。 C中的許多輸入函數會自動將其識別爲終結符(例如scanf和gets),或者您可以逐字符讀取並明確輸入字符。

2

最簡單的方法是要求用戶 「結束文件」,由presing C-Z或C-d。或者:

#define ESC 27 /* But not always. */ 

int ch; 
while ((ch = getc(stdin))) { 
    if (ch == ESC) 
     break; 

    /* ... */ 
} 

由於輸入通常是熟的,它很難謝謝您認爲:用戶可以繼續按逃逸後進入的東西。

此使用的ncurses可替代。那麼,再次按下C-d有什麼問題?

0

可以手動獲取使用getchar()單個字符 - 使用在一個循環來檢查,如果該字符是ESC。但是,如果您要編寫更大的文件,最好使用專用庫如pdcurses

0

我覺得你並不真的需要從控制檯讀取多達那麼多的數據。也許嘗試考慮將數據放入一個文件然後從文件中讀取它。