Фибоначчи с использованием fork () в дочернем процессе - PullRequest
4 голосов
/ 22 ноября 2010

Я написал код ниже для домашних заданий. Когда я запускаю его на XCode в OSX, после предложения «Введите номер последовательности Фибоначчи:» я ввожу число 2 раза. Почему 2 и только 1 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 ]

5 голосов
/ 22 ноября 2010

В вашем scanf есть пробел после %d. Попробуйте scanf("%d", &i);.

0 голосов
/ 17 июля 2014

Когда вы вызываете fork(), оба процесса получают свои собственные копии stdout, и сообщение в буфере дублируется. Таким образом, чтобы решить эту проблему, вы должны очистить стандартный поток перед разветвлением.

Решение: Напишите fflush(stdout) сразу после printf("Enter the number of a Fibonacci Sequence:\n")

...