L'impression de Fibonacci avec fork()
Le problème que j'ai c'est que quand dire, par exemple, l'utilisateur entre 7, puis l'affichage indique:
0 11 2 3 5 8 13 21 child ends.
Je n'arrive pas à comprendre comment résoudre le 11 et pourquoi est-ce que l'affichage du nombre de numéros dans l'ordre! Quelqu'un peut-il aider?
Le numéro de la séquence sera fourni dans la ligne de commande. Par exemple, si 5 est fourni, les cinq premiers nombres de la suite de Fibonacci sera sortie par le processus de l'enfant. Parce que le processus parents et enfants ont leur propre copie de données, il sera nécessaire pour l'enfant à la sortie de la séquence. Ont le parent invoquer le wait() appel à attendre que le processus de l'enfant à terminer avant de quitter le programme. Effectuer la nécessaire vérification des erreurs pour s'assurer qu'un nombre non négatif est passé sur la ligne de commande.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int a=0, b=1, n=a+b,i,ii;
pid_t pid;
printf("Enter the number of a Fibonacci Sequence:\n");
scanf("%d", &ii);
if (ii < 0)
printf("Please enter a non-negative integer!\n");
else
{
pid = fork();
if (pid == 0)
{
printf("Child is producing the Fibonacci Sequence...\n");
printf("%d %d",a,b);
for (i=0;i<ii;i++)
{
n=a+b;
printf("%d ", n);
a=b;
b=n;
}
printf("Child ends\n");
}
else
{
printf("Parent is waiting for child to complete...\n");
wait(NULL);
printf("Parent ends\n");
}
}
return 0;
}
OriginalL'auteur Ellen | 2009-04-05
Vous devez vous connecter pour publier un commentaire.
Le 11 est en fait deux 1 avec aucun espace entre eux. La première vient de la deuxième %d ici, parce que b valeur est 1:
La deuxième vient de la première printf dans la boucle, où n = 1:
OriginalL'auteur Don Neufeld
Sans fin de l'espace ici
vous avez un problème la première fois que vous faites
La plus élégante chose que vous pourriez faire serait de changer la
printf
dans la boucle d'ajouter le besoin d'espace comme ceci:De cette façon, vous n'êtes pas de gauche avec un espace de rangement à la fin...
Vous obtenez "trop nombreux" éléments affichés car vous n'avez pas compté celle qui est écrite dans la première
printf
...OriginalL'auteur dmckee
Il me semble que votre programme est bien la production de la suite de fibonacci, peut-être les deux premiers '1' personnages ressemblent un '11', parce qu'ils sont écrasés sur votre écran?
ouais c'est ce que je pensais, mais tous les autres éléments de la séquence sont séparées par des espaces, et puis j'ai toujours le problème du trop grand nombre d'éléments, 9 éléments affichés lorsque seulement 7 doit être affiché si 7 a été insérés par l'utilisateur
OriginalL'auteur 1800 INFORMATION
votre code a certaines expressions trompeuses......
u obtiennent la valeur entrée au clavier, pas comme argument de ligne de commande...
alors u peut la modifier comme suit...
et alors u peut obtenir la valeur et l'enregistrer comme une valeur entière...
et aussi u peut vérifier que l'utilisateur peut entrer la valeur à l'aide de...
et si u entrez pas de 1 il y, il va imprimer 0 1. mais la réponse doit être à 0;
donc pour éviter ce u peut utiliser deux si les conditions...
si(n == 0)
printf("0 ");
si(n == 1)
printf("1 ");
en utilisant deux ci-dessus si les conditions u peut éviter l'impression de sortie 11....
OriginalL'auteur Aza
écrire
au lieu de
OriginalL'auteur Bia Ch
Enlever le
printf("%d %d"a b);
et de laisser la n de l'impression de toutes les valeurs.Premier jeu de la première variable que l'e.g
a = 1
, puis régler le deuxième:b = 0
et troisièmec=a+b
. Maintenant, la première impressionc
sans aucun changement (printf("%d",c);
), alors nea=b; b=c;
:Aussi, dans votre programme, vous avez fait
n=a+b
deux fois, ce qui n'est pas nécessaire.OriginalL'auteur Abhijeet