私はsetjmp()
とlongjmp()
を使用してc
言語で(つまり、python
でyieldキーワードを使用して実装されている)fibonacci
発電シーケンスのようなものを作るしようとしていた。エラーsetjmp関数を使用してフィボナッチジェネレータのシーケンスを作成する()とlongjmp()
#include <setjmp.h>
#include <stdio.h>
jmp_buf mainTask, childTask;
void child(void);
int main(void) {
long i = 1;
if (!setjmp(mainTask)) {
printf("%ldth Parent\n", i++);
child();
}
for (int j = 0;j < 9;j++) {
printf("%ldth Parent\n", i++);
if (!setjmp(mainTask)) {
longjmp(childTask, 1);
}
}
}
void child (void) {
int c = 0;
long i = 1;
long j = 1;
long k = 0;
for (;;) {
printf("i is:%ld j is:%ld\n", i, j);
k = i + j;
if(i <= j)
i = k;
else
j = k;
c++;
printf("%dth fib number:%ld\n", c, k);
if (!setjmp(childTask)) longjmp(mainTask, 1);
}
}
最初の番号のみが正しく動作します。
*更新:私は、... 2,3,5,8,13期待が、それは2生成、及びnextsは
質問を実際の出力と期待される出力で編集できますか? –
そして、実験のためにこれをやっていることを本当に願っています。なぜなら、純粋なプログラマは、生産コードのためにこのようなスパゲッティコードを作成することはないからです。 –
uは正しく考えています。私は自分自身に挑戦したいです – arianpress