入力として整数(たとえば、数値1000)を取り、数値を個々の数字(この場合は1、0、0、0)に分割し、各数字を数字と呼ばれる配列に割り当てるCの次の関数があります:
int splitnumber(int x)
{
temp=x;
while(temp)
{
temp=temp/10;
factor = factor*10;
}
while (factor>1)
{
factor = factor / 10;
digits[i]= x/factor;
x = x % factor;
i = i + 1;
}
}
これは初めてうまく機能しますが、ループで使用すると、数字の配列が毎回変更されていないように見えますが、最初と同じ値を保持しています。新しい番号で関数を再度使用しようとするだけでも同じことが言えますが、最初の試行の結果にまだかかっています。これを使用しようとしているループは次のとおりです。
do
{
splitnumber(number);
lowhigh = sort_lowtohigh(digits);
highlow = sort_hightolow(digits);
printf ("\n\nLoop number is:%d\n", number);
printf ("High to Low is: %d\n", highlow);
printf ("Low to high is: %d", lowhigh);
printf("\n");
printf ("Subtraction is: %d", subtraction(highlow, lowhigh));
number++;
} while (number <= 1020);
ご覧のとおり、数字配列を使用する他の関数もいくつか使用しています。これらの関数は正常に動作しているように見えますが、数字の配列が変更されていないため、2 回目のループでは正しい結果が得られません。出力は次のとおりです。
ループ数:1001 高から低: 1100 低から高: 11 減算: 1089 ループ数:1002 高から低: 1100 低から高: 11 減算: 1089 ループ数:1003 高から低: 1100 低から高: 11 減算: 1089
ループは数値カウンターをインクリメントしていますが、数字配列は更新されていません。