[英]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.