【问题标题】:Why would C get stuck halfway through a while loop?为什么 C 在 while 循环中会卡住?
【发布时间】:2011-07-04 17:32:10
【问题描述】:

当我编译并运行这段代码(它是一个更大程序的一部分)时,Linux 会在 while 循环中途结束,然后就停止工作。

下面的代码打印time: 0 然后挂起,在我暂停进程之前什么都不做。为什么它会打印time: 0 而不是下面的健全性检查行?

while (i < 5)
{
    printf("time: %d\n",elapsedTime);
    printf("sanity check");
    foo();
    i++;
}

【问题讨论】:

    标签: c while-loop


    【解决方案1】:

    输出通常是缓冲的,并且仅在刷新或换行之后写入。在

    printf("sanity check");
    

    没有换行符,所以如果你在此之后无限循环运行,你将看不到它。 替换为

    printf("sanity check\n");
    

    printf("sanity check");
    fflush(stdout);
    

    你会看到的。

    【讨论】:

    • 哦,太好了。我担心这个功能,但我认为我什至没有达到它。现在我知道我,我可以继续调试。谢谢!。我会在 10 分钟内接受答案。当我可以的时候。
    • @Raven:如果您使用调试器进行调试(线索就在名称中),您就会知道它已经走了那么远,并且可能最终失败的原因(在 foo()毫无疑问)。
    • @Clifford - 是的。我已经被 Visual Studio 和 C# 开发宠坏了。不幸的是,我无法让 VS 处理普通的 C 环境,所以我只能单独使用 JEdit。
    • @Raven:但你说你在 Linux 上开发,在 Linux 上使用 GDB 或 GDB 前端,如 Insight 或 KDevelop。让 Visual C++ 编译 C 代码很简单。所需要做的就是用 .c 扩展名命名源。不要让“添加新项目”不提供 C 文件作为类型的事实让您失望,只需忽略提供的默认值并在文件名框中键入 filename.c,您就可以走。我还建议您使用“空项目”模板启动您的项目,这样它就不会为您生成任何 C++ 或 C++/CLI 模板代码。
    • @Clifford - 哎呀。那应该是GEdit,而不是JEdit。我会调查一下,谢谢。
    猜你喜欢
    • 2012-10-11
    • 2016-06-04
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多