簡體   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