0

我编写了一个小型 C 程序,我想在其中显示与某些按键对应的数字 ASCII 值。

我的代码如下。问题是,运行程序后,它接受输入,但不做任何其他事情。它甚至没有到达第一个 printf 语句。我无法弄清楚问题是什么 -在同一个程序中将 getchar() 函数与 printf() 函数混合是否有问题?

#include <stdio.h> 

int main() {

    const int numKeys = 256;

    int keys[numKeys];

    int i;
    for (i = 0; i < numKeys; i++) {

        keys[i] = 0;
    }

    printf("\n Start pressing some keys!\n\n");

    int c;
    while ((c = getchar()) != EOF) {

        printf(" CAPTURED: %d\n", c);

        keys[c]++;
    }

    printf("\n\n ** RESULTS ** \n\n");

    for (i = 0; i < numKeys; i++) {

        if (keys[i] != 0) {

            printf(" Key with value %d was called %d times.", i, keys[i]);
        }
    }
}

我应该澄清一下,我有一台安装了 Cygwin 的 Windows XP Pro 机器。我使用 Cygwin 作为我的开发空间,所以我想知道在那个环境中运行这种类型的程序时是否有什么不同。

4

3 回答 3

0

我发现了问题。我想你想用

while ((c = getchar()) != EOF && c != '\n')

相反,如果您想让它在该人点击输入/返回后打印结果。

于 2013-03-20T05:44:23.097 回答
0

问题 1:printf(" CAPTURED: %d\n", c);无需Enter按键即可到达 解决方案:getche()在 while 循环中使用。

问题 2:进入 'printf("\n\n ** RESULTS ** \n\n");' 还是本质上打破了while循环?

解决方案:你不能EOF只要您从键盘上阅读,您就永远不会得到。解决方法:关闭标准输入或使用除EOF.

编辑:解决方法2:->使用 getchar() 本身。但是要打印那些输入的字符,你需要Enter按键。现在在windows上ctrl+z给出EOF,但这应该是**FIRST**Enter按键后的输入。好吧,这不是一个好的解决方案。

如果你想要一个“按键显示时间按下场景。没有简单的方法(AFAIK)”

于 2013-03-20T05:59:35.303 回答
0

我相信第一printf条语句被执行,但由于缓冲没有立即显示在屏幕上。用于fflush(stdout)将缓冲区的内容发送到屏幕。IE:

printf("\n Start pressing some keys!\n\n");
fflush(stdout);
于 2014-02-21T12:34:21.367 回答