Я пытаюсь создать структуру Collatz, которая запрашивает у пользователя, сколько раз они хотели бы запустить его. Затем он циклически меняет код, увеличивая каждый раз на 3 (n = n + 3). Хотя код частично работает, он продолжает повторять предыдущий процесс, который завершен, например. с входом 5 и запуском процесса 3 раза «Ребенок 1 = 5, 16, 8, 4, 2, 1» и «Ребенок 2 = 8,4,2,1» и «Ребенок 3 = 11,34,17 , 52,26,13 и т.д. «.
Проблема в том, что она чередуется слишком много раз и запускает каждый Child несколько раз. Одно время это правильно, и во второй раз, когда он запускает его, он запускает последовательность в «1.»
Я запускаю это из Linux Debian. Для компиляции я использую «gcc -o filename filename.c», а затем для выполнения использую «./filename 5», где 5 - это число, переданное в «n» для структуры Collatz. Затем он запрашивает, сколько раз запускать цикл.
Я понимаю, что я, вероятно, далеко, но я полностью потерян и буду очень признателен за любую помощь.Collatz Structure Loop
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
pid_t pid;
int n, j, x;
printf ("How many times would you like this to run?\n");
scanf ("%d",&j);
if (argc == 1) {
fprintf (stderr,"Usage: ./a.out <starting value>\n");
return -1;
}
printf("\nMain program's process ID: %d\n",getpid());
n = atoi(argv[1]);
for (x=1; x <= j; x++){
pid = fork();
if (pid < 0) {
fprintf(stderr, "Unable to fork child\n");
return -1;
}
else if (pid == 0) { /*child process */
printf("\nChild %d (ID: %d)\n",x,getpid());
printf("\nStart sequence at: %d\n",n);
while (n != 1) {
n = n % 2 ? 3 * n + 1 : n/2;
printf("\n(Child %d) %d ",x,n);
}
printf("\n\nAbout to end execution (I'm process %d) .\n",getpid());
}
else { /* parent process */
wait(NULL);
n = n + 3;
}
}
return 0;
}
ahh, что дает больше смысла. Я знал, что помещаю некоторые переменные и код в неправильные разделы, но не мог понять, как их исправить. Проводите бесчисленные часы и даже дни. Ты определенно спас меня. Я ценю эти дополнительные советы, отличная информация! Спасибо! – asyncle