我在C语言书中找到了这个例子。 此代码转换输入数字基数并将其存储在数组中。
#include <stdio.h>
int main(void)
{
const char base_digits[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
int converted_number[64];
long int number_to_convert;
int next_digit, base, index = 0;
printf("type a number to be converted: \n");
scanf("%ld", &number_to_convert);
printf("Base\n");
scanf("%i", &base);
do
{
converted_number[index] = number_to_convert % base;
++index;
number_to_convert = number_to_convert / base;
}
while (number_to_convert != 0);
// now display the number
printf("converted number = :");
for (--index; index >= 0; --index )
{
next_digit = converted_number[index];
printf("%c", base_digits[next_digit]);
}
printf("\n");
return 0;
}
我无法理解最后一个for循环。它应该有助于扭转阵列,但我不明白如何!
这一行是什么意思:for (--index; index >= 0; --index)
?
答案 0 :(得分:1)
回想一下for
标题有三个部分:
通常,声明/初始化部分设置一个新的循环变量。但是,不要求这样做。特别是,当多个循环共享相同的循环变量时,初始化部分会调整现有值或完全丢失。
这正是您所处的情况。 do
/ while
循环将index
推进到数组末尾之后的converted_number
。如果需要从index
的后面开始处理,则需要在进入循环之前递减while
,然后在每次迭代时递减它。
请注意,另一种可能性是在index
上使用while (index > 0) {
next_digit = converted_number[--index];
printf("%c", base_digits[next_digit]);
}
循环预先减少:
{{1}}