代码给出了意想不到的结果

标签 c

<分区>

我只是在试验 fork() c++ 函数。但我发现了令人惊讶的结果

#include<stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>
int main()
{
 int x=0;
  int i;
  for( i=0;i<2;i++)
  {
    fork();
    x=x+5;
    printf("%d\n",x);
   sleep(2);
  }
  return 0;
}

这段代码给出了预期的输出 5

5

10

10

10

10

但是当我用空格替换 printf 中的新行时,相同的代码表现得非常不同

int main()
{
 int x=0;
  int i;
  for( i=0;i<2;i++)
  {
    fork();
    x=x+5;
    printf("%d  ",x);
   sleep(2);
  }
  return 0;
}

5 10 5 10 5 10 5 10

谁能告诉我为什么用空格替换新行时会出现如此异常的结果。

我正在使用 gcc 编译器 gcc 版本 4.1.2 20080704(红帽 4.1.2-48)

提前致谢

最佳答案

标准输出流通常是行缓冲的。当您在打印时包含 \n 时,您会刷新流并且 5 在调用下一个 fork() 之前打印到控制台.当您不包含它时,它只是在某个缓冲区中徘徊,并在调用 fork 时与其他所有内容一起复制。

关于代码给出了意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752028/

相关文章:

c - 我怎样才能复制一个数组? (尺寸相同)

android - 如何在我的共享库中包含正确的包含文件以使用 libdvm.so?

c++ - 异常处理是否需要面向对象的编程?

javascript - 从左到右计算googolplex二进制

c - 使用尺寸 8 Valgrind 的未初始化值

c++ - 程序地址范围

c++ - 在不使用Abs函数或if语句的情况下获取绝对值

c - 用于在具有所需扩展名的目录中递归列出文件名的 Windows C 代码

c - 从 C 中的命令行复数化字符串

C 堆分配硬编码结构数组