我目前正在參加CS50課程,而且我被困在信用問題上。這個想法是製作一個程序來驗證卡,因爲它們的內置校驗和。第一步是取每一位數字並乘以2,然後將所有產品的數字一起添加。令人困惑的字符串交互
我的代碼還沒有完成,但我已經設置好打印一些中間步驟,以便我可以看到發生了什麼。
#include <stdio.h>
#include <string.h>
void checksum (char number[20]);
int main (void){
char *card;
printf("Please enter a card number:");
scanf("%s", card);
if (strlen(card) == 13 || strlen(card) == 16 || strlen(card) == 15) {
checksum(card);
}
else{
printf("Not a number. Please try again.\n");
main();
}
}
void checksum (char *number) {
int check = 0;
int digits = 0;
for(int i = 1; i < 17; i += 2){
printf("No%c\n", number[i]);
digits = (number[i] * 2);
printf("D%i\n", digits);
while (digits > 0) {
check += digits % 10;
printf("C%i\n", check);
digits = digits/10;
}
}
}
我知道第一部分遠非完美,但它是目前我關心的校驗和功能。當它需要第二個數字(5)時,一切都很好。但是當它按照下一行乘以2時,不知何故結果是106(?)
有人可以解釋這裏發生了什麼嗎?
你乘以ASCII字符(即文本)。首先轉換爲數值。 – kaylum
[如何將單個字符轉換爲int]可能的重複(https://stackoverflow.com/questions/439573/how-to-convert-a-single-char-into-an-int) – kaylum
首先,替換char *卡; scanf(「%s」,卡片);'帶'char卡片[20]; scanf(「%s」,卡片);' –