Печать стартового номера для гипотезы Коллатца в C - PullRequest
0 голосов
/ 09 февраля 2019

Я работал над этим школьным заданием, и мы работаем над созданием гипотезы Коллатца на языке C. Я выполнил весь код, и единственное, что осталось, - это передать номер и распечататьс числами я вернусь из моей логики.Я пытался использовать printf() до и после каждого изменения входных данных, но это только печатает число дважды для каждой итерации.Ниже приведен пример того, как это должно работать.Я также поставлю свой код ниже.

For example:
Если я передам число 4.Я должен вернуться 4,2,1

Input Passed : ./hw1 4

Expected Output: 4 , 2, 1 Child ID is : 0 Child ID 1 is : 17488 Parent ID is 17487 Parent PID 1 is : 17488

Actual Output: , 2, 1 Child ID is : 0 Child ID 1 is : 17488 Parent ID is 17487 Parent PID 1 is : 17488

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

int main(int argc, char *argv[]) {

  // this is the number the user passes in 
  int n;

  int pid;
  int my_status;
  pid_t my_pid, my_secondpid;
  my_pid = fork();

  if (argc == 1) {
    fprintf(stderr, "Usage: ./hw1 <starting value>\n");

    return -1;
  }

  n = atoi(argv[1]); //  n is the input starting value

  // Error checking

  if (n < 0 || n == 0) {
    printf("Number cannot be less than 0");
    return 1;

  }

  //pid_t my_pid = fork();

  if (my_pid < 0) {
    printf("Unsuccesfull in creating the child process");
    return 1;

  } else if (my_pid == 0) {

    my_secondpid = getpid();

    //pid_t my_child = getpid();

    while (n != 1) {
      //pid_t my_child = getpid();

      // if the number is even
      if (n % 2 == 0) {
        //printf("%d " , n);
        n = n / 2;
        printf(" , %d", n);
        // printf("\n child id is : %d", my_child);
        // printf(" \n parent : %d" , my_pid);
        //printf("\n parent id is : %d" , my_pid);

      }
      // if the number is odd
      else if (n % 2 != 0) {
        //printf("%d" , n);
        n = 3 * n + 1;
        printf(" ,  %d", n);
        //printf("\n child id is : %d", my_child); 
        // printf(" \n parent : %d" , my_pid);
        //printf("\n parent id is : %d" , my_pid);

      }
      //printf("%d \n", n);

    } // end of while
    printf("\n");
    printf("\nChild ID is : %d", my_pid);
    printf("\nChild ID 1 is : %d", my_secondpid);
    //printf("\nProcess ID : %d", pid); 
  } // end of else if

  else {
    wait(NULL);
    my_secondpid = getpid();
    //printf("\n The starting  pid is : %d \n" , my_pid);
    printf("\nParent ID is %d", my_secondpid);
    printf("\nParent PID 1 is : %d", my_pid);
    printf("\n");

  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...