在Xcode 8.3更新中,C/C++编程printf不给出无换行符的输出

In Xcode 8.3 update, C/C++ programming printf does not give output without newline

上周更新到 Xcode 8.3 后,在 C/C++ 程序中,printf 语句的输出不再出现在没有换行符的屏幕上。因此,我无法提示用户输入数字,并让他们在输入提示后的同一行中输入该数字。

刷新输出缓冲区 [fflush(stdout)cout << endl] 和将输出缓冲区设置为 NULL [setbuf(stdout, NULL)] 都没有解决这个问题,而是一个专门关于 Xcode8.3貌似坏了

注释掉scanf后,下面程序的输出为:

Enter a value for x: Value of x is: 0

有了 scanf,第一个 printf 的输出永远不会出现。如果您继续输入一个值并按回车键,则只会显示 then。输出为:

3
Enter a value for x: Value of x is: 3

完整的测试程序在这里:

#include <iostream>
using namespace std;

int main() {
    int x=0;
    printf("Enter a value for x: ");
    //scanf("%d", &x);

    printf("Value of x is: %d\n", x);
    return 0;
}

我的解决方法是恢复到 Xcode 8.2.1,从 developer.apple 下载。com/xcode/downloads/

调用输入函数(例如 scanf())时刷新标准输出是 C 语言的标准行为,无论调用前是否输出换行符。这确保在输入操作发生之前显示所有适当的输出。因此,更新可能破坏了 Xcode 中的某些内容。虽然我目前不确定问题的确切性质是什么,但(临时)解决方法是在命令行上 运行 您的应用程序。这对我的项目有用。它还显示此问题出在 Xcode 输出 window,而不是编译器或其他东西。

回应 tell 的评论:不,刷新标准输出并不能解决 Xcode 中的问题。这对我来说更强烈地暗示问题肯定出在 Xcode 接口本身。 运行从命令行启动应用程序时,对 fflush() 的调用按预期工作。

此外,打印到 stderr 与 Xcode 内没有区别。基本上,在这种情况下,stdout 应该 被刷新,而不需要诉诸 stderr 或任何其他噱头,因为 OP 正在调用 scanf()。它在命令行中完美运行...只是不在 Xcode 输出 window.

请注意,这个问题不是重复问题:它与任何人对 C 输入和输出如何工作的误解无关,而是与以下事实有关最近对 Xcode 的更新破坏了一些东西。

编辑:

谢谢,joe_04_04。更新似乎确实解决了这个问题。

8.3.2 已于昨晚发布,据说解决了这个问题: