【发布时间】:2013-03-20 05:34:52
【问题描述】:
我编写了一个小型 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 作为我的开发空间,所以我想知道在那个环境中运行这种类型的程序时是否有什么不同。
【问题讨论】:
-
我认为混合它们没有问题,因为 getch 影响标准输入,而 printf 影响标准输出。我认为问题可能出在其他地方?
-
你按回车了吗?
-
它没有达到
printf("result")或printf(captured)?.如果它是前者那么它这样做是正确的,因为如果你没有得到EOF,它将如何打破while loop。getchar等待\r\n或Enter被按下。使用 getche。但即便如此,您也会遇到第一个问题 -
您的程序对我来说运行良好,但话又说回来,我运行的是 Ubuntu Linux。 ctrl+d 给了我一个 EOF,我想 Windows 也有类似的东西。如需有趣的阅读,请查看 c-faq.com/osdep/cbreak.html 以了解无需按 Enter 键即可从标准输入读取字符的方法。
标签: c standard-library