为什么 Vala 在 stdout.printf 之前打印 stderr.printf,即使后者在代码中排在第一位?
Why does Vala print stderr.printf before stdout.printf even though the later is first in the code?
这是一种奇怪的行为。基本上,我有这个代码:
stdout.printf("Enter some random number: ");
int number = int.parse(stdin.read_line());
stdout.printf(number.to_string());
stderr.printf("THIS IS AN ERROR!\n");
现在让我感到奇怪的是,当我编译 运行 这段代码时,我得到了这个输出:
Enter some random number: 2
THIS IS AN ERROR!
2user@host:...
但是,如果我在最后两个命令之间添加一行 stdout.printf("\n");
,我会得到如下输入:
Enter some random number: 2
2
THIS IS AN ERROR!
user@host
为什么会这样?为什么 Vala 在第一个示例中输出 after 和 sterr.printf()
输出,而在第二个示例中输出 before?它不应该在第一个例子中打印 2THIS IS AN ERROR!
吗?
Vala 只是在下面使用 C 的 fprintf
,它显示了这些语义。看看 Why does printf not flush after the call unless a newline is in the format string?
如果你愿意,你可以打电话给stdout.flush()
。
这是一种奇怪的行为。基本上,我有这个代码:
stdout.printf("Enter some random number: ");
int number = int.parse(stdin.read_line());
stdout.printf(number.to_string());
stderr.printf("THIS IS AN ERROR!\n");
现在让我感到奇怪的是,当我编译 运行 这段代码时,我得到了这个输出:
Enter some random number: 2
THIS IS AN ERROR!
2user@host:...
但是,如果我在最后两个命令之间添加一行 stdout.printf("\n");
,我会得到如下输入:
Enter some random number: 2
2
THIS IS AN ERROR!
user@host
为什么会这样?为什么 Vala 在第一个示例中输出 after 和 sterr.printf()
输出,而在第二个示例中输出 before?它不应该在第一个例子中打印 2THIS IS AN ERROR!
吗?
Vala 只是在下面使用 C 的 fprintf
,它显示了这些语义。看看 Why does printf not flush after the call unless a newline is in the format string?
如果你愿意,你可以打电话给stdout.flush()
。