繁体   English   中英

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

[英]C language determine length of array depending on amount of digits entered by the user

我有下面的代码,其中用户输入他们的卡号,每个数字作为元素存储在变量数组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");

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

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

不要忘记链接数学库( gcc ... -lm

成语:measure-allocate-generate。

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

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

#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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM