【发布时间】:2016-08-22 14:51:00
【问题描述】:
我使用 Dev-C++5.11 在我的 Windows XP PC 中创建了一个 C 程序。这是我看到的一个典型的字符计数程序,它是这样的:
#include <stdio.h>
main() {
long nc;
nc = 0;
while (getchar() != EOF) {
++nc;
}
printf("%ld", nc);
}
它编译没有问题,但只有当我按下的字符中包含输入按钮 (\n) 时,它才能正常工作。如果我不打印,它要么打印 0,要么什么都不打印。我尝试包含其他字符,例如制表符或退格,但仍然没有。我正在使用 ctrl+c 来终止它。我做错了什么?
【问题讨论】:
-
也许它不能“按应有的方式”工作,但它只能以它可以工作的方式工作,因为您正在使用等待“输入按钮”的 getchar() 函数
-
@DarkoDjuric:
getchar()不等待“输入”,它等待输入实际出现在stdin。两者是非常不同的东西。 -
@DevSolar 在使用 getchar() 函数时,有没有其他方法可以让它“实际出现在标准输入”?
-
@DarkoDjuric:您需要在输入端禁用缓冲 8*。这可以是您的终端软件的设置。或者您可以使用直接与终端缓冲区通信的 API,即所谓的“原始输入”。 Windows 有
<conio.h>支持 unbuffered functiongetch()。 Unix 有(如果已安装)ncurses 库<curses.h>和 function of the same name(但需要一些额外的管道才能“正常工作”)。无论如何,标准中没有这样的功能...
标签: c