【发布时间】:2020-12-01 07:57:20
【问题描述】:
我遇到以下问题:我想获取一个大数字(大约 15 位数字)并将其转换为单个数字并将它们存储在一个数组中。我将在代码中进一步需要这些数字。问题是,如果我在 while 循环之外声明数组,它会存储前四个值,但随后会出现分段错误。如果我在循环中声明它,代码会按我的意愿工作,但是我不知道如何将数组移出该循环,以便我可以进一步使用它。我该如何解决这个问题?这是我编译的:
unsigned long long card_num;
printf("Enter your credit card number:\n");
scanf("%llu", &card_num);
int count = 0;
while (card_num != 0)
{
int digits[count]; //declaring array into which digits will be stored
digits[count] = card_num%10; // get last digit, store it in array
card_num = card_num/10; //remove last digit
printf("Digit[%i] = %i\n", count, digits[count]);
printf("Number of digits: %i\n", count);
count ++;
}
【问题讨论】:
-
int digits[count];..开始时count的值是多少? -
digits[count] = card_number%10;正在数组外写入。数组索引从0到count-1。 -
声明具有最大可能大小的数组。信用卡号码最多为 16 位。
-
另外,如果您从末尾到开头抓取数字,您需要索引从 count-1 down 变为零,递减而不是递增.
-
这个问题被问了太多次了。它在 first 行开始错误。 首先不要将信用卡号输入到无符号长长中。