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