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