答案 0 :(得分:2)
这是你看到的C行为。
Go不缓冲 do
{
printf("What is your name?\n");
char str[] = get_string(); 'error: array initializer must be an initializer list or string literal'
}
while (namelen[i] = int); //error: use of undeclared identifier 'namelen'
char str[49] = namelen; //error: use of undeclared identifier'namelen'
,而在C中它通常是缓冲的。当C库检测到stdout
是tty时,它可能使用行缓冲,因此stdout
插入的附加\n
将导致输出显示。
您需要刷新puts
以确保获得所有输出:
stdout
另见
Why does printf not flush after the call unless a newline is in the format string?
Is stdout line buffered, unbuffered or indeterminate by default?
答案 1 :(得分:0)
C库缓冲是每行,因此第一行可以在正确刷新之前保留在缓冲区中(在C程序的退出时间完成)。您可以尝试刷新标准输出,也可以尝试在第一个字符串中添加尾随\ n。如果添加\ n,它是否有效?