2010-12-04 7 views
2

を発電機Iは、Cコードのこの単純な部分をデバッグして助けを求めるしたい:Cデバッグ変動が

void generator (int place, char *array, int n, int lol){ 
int i; 
char c[6]={'1','0','+','-','*','/'}; 

if(n==0){ 
printf("%s\n",array); 
return; 
} 
for(i=0; i<6; i++){ 
    if (lol==0){ 
     if (i>1) break; 
     array[place]=c[i]; 
     lol=1; 
     generator(place+1, array, n-1, lol); 
    } 
    if(lol==1){ 
     array[place]=c[i]; 
     if(i>1){ 
      lol=0; 
      generator(n+1, array, n, lol); 
     } 
     else{ lol=1; 
    generator(place+1, array, n-1, lol);} 
    } 
}} 

関数をn N-1に0によって分離され、1と0を含む文字列を生成するようになっています例えば、オペレータ のn == 3の場合、出力は次のようになります。

111 
1+11 
11+1 
1+1+1 
1*11 
11*1 
1*1*1 
.... 
0/00 
00/0 
0/0/0 
000 

私は初心者プログラマですので、任意のヒントをいただければ幸いです。

+0

あなたのコードには、変数 '' lol' 'がありますが、その名前と目的は分かりません(少なくとも私はそれを調べることはできません。 –

答えて

1

関数を呼び出すたびに同じ配列が使用され、配列の既存の要素を上書きしてシンボルを挿入します。これらのどちらもあなたがしたいことではありません。

また、どのように関数を呼び出していますか?最初に '配列'に含まれるものは何ですか?

+0

私はこのような関数を呼び出します:generator(0、array、n、0);配列はちょうど割り当てられた最初の空です – boone

+0

関数に配列を渡さないでください。適切なサイズに動的に割り当てられたローカル配列を使用するようにします。そうすれば、それぞれのコールに対して別々のデータチャンクが得られます。配列のサイズを設定するときに挿入するシンボルを指定して、malloc()をfree()してください。 –

+1

また、擬似コードを最初に書き出すと、何を行う必要があるかが正確に分かります。 –

0

バックトラックアルゴリズムを検討することを検討する必要があります。私の意見では、これはバックトラッキングの問題です。