私はCollatz構造を作成しようとしていますが、何回実行するかをユーザーに尋ねます。次に、毎回3ずつ増加するコードをループします(n = n + 3)。コードが部分的に機能している間、それは終了した前のプロセスを繰り返し続けます。入力が5であり、プロセス「Child 1 = 5,16,8,4,2,1」および「Child 2 = 8,4,2,1」および「Child 3 = 11,34,17」を3回実行する、52,26,13、等。 "
問題は、何度も繰り返しループしており、各子を複数回実行していることです。それが正しい場合、そしてそれを2回目に実行すると、シーケンスは「1」で始まります。
私はこれをLinux Debianから実行しています。コンパイルするには "gcc -o filename filename.c"を使い、実行するには "./filename 5"を使います。ここで5はCollatz構造体の "n"に渡される数値です。次に、ループを実行する回数を入力します。
私はおそらく道のりは分かっていますが、私は完全に失われており、援助に感謝します。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;
}
これはかなり意味があります。私は変数とコードのいくつかを間違ったセクションに入れていたが、それを修正する方法を理解できなかったことを知っていた。何時間も何日も費やす。あなたは間違いなく私を救った。私はそれらの余分なヒントだけでなく、素晴らしい情報に感謝!ありがとうございました! – asyncle