C语言根据用户输入的位数确定数组的长度

时间:2019-03-07 15:29:59

标签: c

我有以下代码,用户在其中输入卡号,每个数字都作为元素存储在变量数组digits[]中。

我想要实现的是在for循环存储完所有数字之后停止循环,但是,我正在努力根据输入的卡号的长度来设置循环。

我已经尝试过使用下面的代码,将sizeof(cardNo)存储在变量长度中并将长度设置为循环条件。

假设用户输入1234,运行以下代码,我收到的结果是43210000,而我正在寻找的只是4321。

如果我将int digits设置为digits[4]并将循环条件设置为<4,它将给我4321,但是显然,这限制了我只能输入4位数字,而实际上我希望这是灵活的,即如果他们输入6位数字,将给我123456;如果他们输入8位数字,将给我12345678等。

有什么想法或建议吗?

long cardNo = get_long("Enter Card Number: ");
int length = sizeof(cardNo);
int count = 0;
int digits[length];

for (int i = 0; i < length; i++) {
  digits[i] = cardNo % 10;
  cardNo /= 10;
  printf("%i\n", digits[i]);
} 
printf("\n");

3 个答案:

答案 0 :(得分:3)

数字的长度基于其对数底数10:

#include <math.h> //log10
....
    int len = log10(cardNo) + 1;
...

别忘了链接数学库(gcc ... -lm

答案 1 :(得分:0)

成语:度量分配生成。

size_t n =0;
for (; i < cardno; ) {
  cardNo /= 10;
  n++;
} 
if(!n)n++;//0
int*digits=malloc(n*sizeof(int));

答案 2 :(得分:0)

考虑到最大数量的代码(可能是开发人员选择将固定大小的容器存储在堆栈上,作为静态对象等),代码可能会更简单:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define STRINGIFY(x) STRINGIFY2(x)
#define STRINGIFY2(x) #x

#define MAX_NUMBERS 16

int main() {
    char cardNum[MAX_NUMBERS + 1];
    size_t sizeCard;

    printf("Enter card numbers\n");
    scanf("%" STRINGIFY(MAX_NUMBERS) "s", cardNum);
    sizeCard = strlen(cardNum);
    for (int i = 0; i < sizeCard; i++) {
        printf("%c\n", cardNum[i]);
    }
    printf("\n");
}