我目前正在参加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”,卡片);' –