在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 已于昨晚发布,据说解决了这个问题:
上周更新到 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 已于昨晚发布,据说解决了这个问题: