2010-11-22 13 views
4

J'ai écrit le code ci-dessous pour les devoirs. Quand je l'exécute sur XCode dans OSX, après la phrase "Entrez le numéro d'une séquence Fibonacci:", j'entre le nombre 2 fois. Pourquoi 2 et seulement 1 scanf.fibonacci en utilisant fork() dans le processus enfant

Le code:

#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; 
} 

Répondre

5

Vous avez un espace après %d dans votre scanf. Essayez scanf("%d", &i);.

0

Lorsque vous appelez fork(), les deux processus obtiennent leurs propres copies de stdout et le message dans le tampon est dupliqué. Donc, pour résoudre ce problème, vous devrez vider stdout juste avant de forking.

Solution: Ecrire fflush(stdout) juste après printf("Enter the number of a Fibonacci Sequence:\n")