斐波纳契在子进程中使用fork()

时间:2010-11-22 14:21:53

标签: c linux system fork

我为了完成家庭作业而编写了以下代码。当我在OSX中的XCode上运行它时,在句子“输入Fibonacci序列号:”之后,我输入数字2次。为什么只有2 scanf

代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main()

{



int a=0, b=1, n=a+b,i;


printf("Enter the number of a Fibonacci Sequence:\n");
scanf("%d ", &i);

pid_t pid = fork();
if (pid == 0)
{
    printf("Child is make the Fibonacci\n");
    printf("0 %d ",n);
    while (i>0) {
        n=a+b;
        printf("%d ", n);
        a=b;
        b=n;
        i--;
        if (i == 0) {
            printf("\nChild ends\n");
        }
    }
}
    else 
    {
        printf("Parent is waiting for child to complete...\n");
        waitpid(pid, NULL, 0);
        printf("Parent ends\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:5)

您的scanf中%d后面有空格。试试scanf("%d", &i);

答案 1 :(得分:0)

当您调用fork()时,两个进程都会获得自己的stdout副本,并且缓冲区中的消息会重复。 因此,为了解决这个问题,你必须在分叉之前冲洗stdout。

解决方案: 在fflush(stdout)

之后写下printf("Enter the number of a Fibonacci Sequence:\n")