2011-08-22 145 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 
    } 
}