2009-04-05 2 views
2

Проблема, которую я имею, что, когда говорят, например, пользователь вводит 7, то на дисплее появится сообщение:Печать Фибоначчи с вилкой()

0 11 2 3 5 8 13 21 child ends. 

Я не могу показаться, чтобы выяснить, как исправить 11 и почему показывает, что многие числа в последовательности! Может ли кто-нибудь помочь?

Номер последовательности будет предоставлен в командной строке. Например, если 5 предоставлено, первые пять чисел в последовательности Фибоначчи будут выводиться дочерним процессом. Поскольку родительский и дочерний процессы имеют свои собственные копии данных, ребенку необходимо будет вывести последовательность. Попросите родителя вызвать вызов wait(), чтобы дождаться завершения дочернего процесса до выхода из программы. Выполните необходимую проверку ошибок, чтобы гарантировать, что в командной строке будет передан неотрицательный номер.

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

ответ

1

Он смотрит на меня, как ваша программа правильно производит последовательность Фибоначчи, может быть, первые два «1» персонажи выглядят как «11», потому что они раздавлены вместе на экране?

+0

Nope. У Элен действительно отсутствует пробел между ними. Посмотрите внимательно на первый printf ... – dmckee

+0

Да, это то, что я понял, но все остальные элементы последовательности разделены пробелами, а затем у меня все еще есть проблема с слишком большим количеством элементов, 9 элементов отображаются, когда отображается только 7 если 7 был введен пользователем – Ellen

13

11 на самом деле два 1 с без пробелов между ними. Первый исходит от второго% D здесь, потому что величина В составляет 1:

printf("%d %d",a,b); 

второе происходит от первого Printf в цикле, где п = 1:

printf("%d ", n); 
+0

Быстрые пальцы выигрывают ... – dmckee

7

Без заканчивающегося пространства здесь

printf("%d %d",a,b); 

вы получите в неприятности первый раз, когда вы делаете

printf("%d ", n); 

Самые элегантная вещь, которую вы могли бы сделать, чтобы изменить printfв петле предварять необходимое пространство, как это:

printf(" %d", n); 

Таким образом, вы не остались с висящим пробелом в конце ...


вы получаете «слишком много» элементов, отображаемых, потому что вы не подсчитывали один написанный в первом printf ...

0

Сними printf("%d %d"a b); и пусть n напечатает все значения.

Сначала установите первую переменную, например, a = 1, затем установите вторую: b = 0 и третью c=a+b. Теперь первая печать c без каких-либо изменений (printf("%d",c);), то сделать a=b; b=c;:

for (i=0; i<ii; i++) 
{ 
    c=a+b; 
    printf("%d ", c); 
    a=b; 
    b=c; 
} 

Кроме того, в вашей программе вы сделали n=a+b дважды, что не требуется.

1

код имеет некоторое вводящее в заблуждении выражения ......

у получает значение как ввод с клавиатурой, а не в качестве аргумента командной строки ... так и может изменить его следующим образом ...

 main(int argc, char *argv[]) 

и то и может получить значение и сохранить его как целое значение ...

 int num = atoi(argv[1]); 

, а также и можно проверить, что пользователь может ввести значение, используя ...

 if(argc < 2) 
     { 
      printf("You must enter a value to proceed this operation..\n"); 
      return;   
     } 

и если у вас нет 1, он будет печатать 0 1., но ответ должен быть только 0; , поэтому, чтобы избежать этого, вы можете использовать два условия if ... if (n == 0) printf ("0"); if (n == 1) printf ("1"); при использовании выше двух, если условия u могут избежать печати вывода 11, как хорошо ....

Смежные вопросы