2011-08-22 61 views
1

如何多次讀取循環中的回車鍵?在C中循環讀取輸入密鑰

我試過以下沒有結果。

char c; 
for (i=0; i<n; i++){ 
    c = getchar(); 
    fflushstdin(); 
    if (c == '\n'){ 
     //do something 
    } 
} 

而且fflushstdin:

void fflushstdin(){ 
    int c; 
    while ((c = fgetc (stdin)) != EOF && c != '\n'); 
} 

如果我讀其他任何字符而不是回車鍵就可以完美運行,但與回車鍵在某些迭代我必須按回車2次。

謝謝。

編輯:我在windows上通過膩子執行程序,程序在虛擬框上的虛擬linux薄荷上運行。

+1

的getch()讀取鍵擊,而無需等待您按Enter鍵。 getchar()需要你輸入,所以你最終擊中兩次。 – Vivek

回答

4

爲什麼要調用fflushstdin()?如果fgetc()返回與\ n不同的內容,則該字符將被完全刪除。

這應該工作:

char prev = 0; 

while(1) 
{ 
    char c = getchar(); 

    if(c == '\n' && prev == c) 
    { 
     // double return pressed! 
     break; 
    } 

    prev = c; 
} 
+0

我不知道爲什麼,但這個解決方案是正確的O.o.謝謝!它解決了雙輸入按鍵。 –

+0

在正則表達式中,上面的解決方案接受'\ n。* \ n',而接受'\ n \ n' – wormsparty

2

嘗試進入

if (ch == 13) { 
    //do something 
} 

ASCII值是13,有時\ n將無法正常工作。

0

你應該去:

char c; 
for (i=0; i<n; i++){ 
    c = getchar(); 
    fflushstdin(); 
    if (c == 13){ 
     //do something 
    } 
} 

因爲13是ASCII碼Enter關鍵。

+1

爲什麼不使用'\ r'代替?它是一樣的,但更具可讀性。 –

+0

仍然不能與10和13一起工作.10會產生與\ n相同的結果,而13只會執行if條件。 –

+0

試試:c = getch();然後if(c == 13){...} – Vivek

0

您總是執行兩次getchar(即使沒有必要)。嘗試將呼叫限制爲fflushstdin

char c; 
for (i=0; i<n; i++){ 
    c = getchar(); 
    if ((c != EOF) && (c != '\n')) fflushstdin(); 
    if (c == '\n'){ 
     //do something 
    } 
}