我有一个非常简单的C示例程序,它从输入中对字符单词和空格进行粗略计数。程序编译时没有错误,但在测试时,程序不会通过print函数返回任何int变量。我正在使用VS2012进行编码和编译。单步执行代码表明正在正确计算值。我的代码或编译器有问题吗?
#include <stdio.h>
#define IN 1
#define OUT 0
/* count digits, white space, others */
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF){
++nc;
if(c == '\n'){
++nl;
}
if (c == ' ' || c == '\n' || c == '\t'){
state = OUT;
} else if (state == OUT){
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
答案 0 :(得分:0)
如果您使用来自文件stdin
的{{1}}来运行它,则会有效。如果您使用来自Linux上的控制台的a.exe < test.txt
运行它,它就可以工作。如果您使用来自Windows上的控制台的stdin
运行它,它将无效。
它必定是某种Windows控制台的怪异。
答案 1 :(得分:0)
要查看实际输出,请使用Ctrl-F5启动调试器。这将使控制台窗口保持打开状态。
有关详细信息,请参阅this answer。
答案 2 :(得分:-2)
你的循环是永久性的。意思是它没有结束..所以它没有达到printf
的调用。
EOF是指示器,显然不像这里那样工作。您必须打破特定键的循环。比如输入例如,回车符号的十进制表示为13。 10为NL。