【问题标题】:C printf() not returning valuesC printf() 不返回值
【发布时间】:2015-03-27 18:20:08
【问题描述】:

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

【问题讨论】:

  • 您确定已将输出生成到有效的日志或窗口中并且正在寻找输出的正确位置吗?此外,在极少数 的情况下,不会刷新输出,如果有疑问,您应该明确刷新。您是否从命令行运行此代码?如果是这样,它应该打印。否则,如果是 GUI 或其他东西,则可能有另一种显示结果的机制。
  • 你用EOF打破循环了吗?
  • 啊,好点 - 换句话说,他能看到任何 printf() 输出。如果我在编写代码,我会在一开始就确定的东西。
  • @rlwheeler 按 Ctrl + F5 运行程序。您还必须在按 Ctrl + z 之前按 Enter
  • 对我来说很好。运行它,输入一些东西,按 ctrl-z,查看输出。

标签: c visual-studio-2012 printf


【解决方案1】:

如果您使用来自文件a.exe &lt; test.txtstdin 运行它,它就可以工作。如果您使用来自 Linux 控制台的 stdin 运行它,它就可以工作。如果您在 Windows 上使用来自控制台的 stdin 运行它,它将不起作用。

这一定是某种 Windows 控制台异常。

【讨论】:

  • 在 Windows 控制台中运行良好,以 Ctrl-z 结尾,但必须在换行符之后立即中断。
  • 那么它一定是一些 cygwin 怪事
  • 如果使用 bash,那么通常的 Unix ctrl-d 即使在 Windows 下也应该可以工作。
【解决方案2】:

要查看实际输出,请使用 Ctrl-F5 启动调试器。这将使控制台窗口保持打开状态。

更多信息请参见this answer

【讨论】:

    【解决方案3】:

    您的循环是永久性的。意思是它没有结束..所以它没有到达printf的电话。

    EOF 是一个指标,在这里显然不能这样工作。您必须打破特定键上的循环。比如回车,哪个字符十进制表示为 13 表示回车。荷兰 10 分。

    【讨论】:

    • 为什么他的循环是无限的?
    • 产生EOF就结束。
    • 不是自动指定的。
    • @DeltaProxy 什么没有自动指定?他可以简单地按Ctrl+Z吗?
    • @DeltaProxy 您为什么认为 EOF 不起作用?这是从标准输入检测输入结束的正常方法(就像从任何流中一样)。
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2021-05-17
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多