在C中循环读取输入键

时间:2011-08-22 08:45:30

标签: 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次。

感谢。

编辑:我正在通过putty在Windows上执行程序,程序运行在虚拟盒上的虚拟化Linux薄膜上。

4 个答案:

答案 0 :(得分:4)

你为什么叫fflushstdin()?如果fgetc()返回与\ n不同的内容,则该字符将被完全删除。

这应该有效:

char prev = 0;

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

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

    prev = c; 
}

答案 1 :(得分:2)

尝试

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

enter的ASCII值为13,有时\ n不起作用。

答案 2 :(得分:0)

你应该选择:

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

因为13Enter密钥的ASCII代码。

答案 3 :(得分:0)

您总是执行getchar两次(即使没有必要)。尝试限制对fflushstdin的调用:

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