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