在同一个C程序中一起使用putchar和printf?

时间:2013-03-20 05:34:52

标签: c standard-library

我写了一个小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作为我的开发空间,所以我想知道在该环境中运行这种类型的程序时是否存在不同之处。

3 个答案:

答案 0 :(得分:0)

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

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

相反,如果您希望在人员点击进入/返回后打印结果。

答案 1 :(得分:0)

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

问题2:进入'printf(“\ n \ n **结果** \ n \ n”);'或基本上打破循环?

解决方案:你不能。只要您从键盘上读取,就永远不会得到EOF。 解决方法:关闭stdin或使用EOF以外的转义字符。

编辑:解决方法2: - &gt;使用getchar()本身。但要打印输入的字符,需要按Enter键。现在在Windows ctrl+z上提供EOF,但在按**FIRST**键后,这应该是该行的Enter输入。这不是一个好的解决方案。

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

答案 2 :(得分:0)

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

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