C printf()没有返回值

时间:2015-03-27 18:20:09

标签: c visual-studio-2012 printf

我有一个非常简单的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);
}

3 个答案:

答案 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。