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

标签 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");

最佳答案

一个数的长度是基于它的以 10 为底的对数:

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

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

关于C语言根据用户输入的位数确定数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047405/

相关文章:

c - 在哪里可以找到 radix-5 FFT 实现?

c - 在 C 中打印一个 Trie

c - 如何用 C 语言编写函数的通用钩子(Hook)?

C-Linux 内核 : Closing two kthreads freezes machine

c - 处理大量数字和溢出

c - __insn_seqb() 和 __insn_ctz 是什么意思?

C/C++ I18N mbstowcs 问题

c - shm_open : Differences between Mac and Linux

c - 这是在 c 中计算球体体积的正确代码吗?

c - 如何将结构显式加载到 L1d 缓存中?